EFI和BIOS
出处:itercast.com
UEFI是Unified Extensible Firmware Interface,统一可扩展固件接口,原名EFI,之后由UEFI论坛推广和发展并改名。EFI在概念上非常类似于一个低阶的操作系统,并且具有操控所有硬件资源的能力。
①EFI是用模块化,C语言风格的参数堆栈传递方式、动态链接的形式构建的系统,较BIOS而言更易于实现,容错和纠错特性更强,缩短了系统研发的时间。
②运行于32位或64位模式,乃至未来增强的处理器模式下,突破传统16位代码的寻址能力,达到处理器的最大寻址。
③利用加载EFI驱动的形式,识别及操作硬件,不同于BIOS利用挂载真实模式中断的方式增加硬件功能。BIOS必须将一段类似于驱动的16位代码,放置在固定的0x000C0000至0x000DFFFF之间存储区中,运行这段代码的初始化部分,它将挂载实模式下约定的中断矢量向其他程序提供服务。例如,VGA图 形及文本输出中断(INT 10h),磁盘访问中断服务(INT 13h)等等。由于这段存储空间有限(128KB),BIOS对于所需放置的驱动代码大小超过空间大小的情况无能为力。另外,BIOS的硬件服务程序都以 16位代码的形式存在,这就给运行于增强模式的操作系统访问其服务造成了困难。因此BIOS提供的服务在现实中只能提供给操作系统引导程序或MS-DOS 类操作系统使用。而EFI系统下的驱动并不是由可以直接运行在CPU上的代码组成的,而是用EFI Byte Code编写而成的。这是一组专用于EFI驱动的虚拟机器语言, 必须在EFI驱动运行环境(Driver Execution Environment,或DXE)下被解释运行。这就保证了充分的向下兼容性,打个比方说,一个带有EFI驱动的扩展设备,既可以将其安装在安腾处理器 的系统中,也可以安装于支持EFI的新PC系统中,而它的EFI驱动不需要重新编写。这样就无需对系统升级带来的兼容性因素作任何考虑。
④EFI 驱动开发简单,所有的PC部件提供商都可以参与,情形非常类似于现代操作系统的开发模式,这个开发模式曾使Windows在短短的两三年时间内成为功能强大,性能优越的操作系统。基于EFI的驱动模型可以使EFI系统接触到所有的硬件功能,在操作系统运行以前浏览万维网站不再是天方夜谭,甚至实现起来也非常简单。这对基于传统BIOS的系统来说是件不可能的任务,在BIOS中添加几个简单的USB设备支持都曾使很多BIOS设计师痛苦万分,更何况除了添加对无数网络硬件的支持外,还得凭空构建一个16位模式下的TCP/IP协议栈。
EFI由以下几个部分组成:
Pre-EFI初始化模块
EFI驱动执行环境
EFI驱动程序
兼容性支持模块(CSM)
EFI高层应用
GUID磁盘分区表
在EFI规范中,一种突破传统MBR磁盘分区结构限制的GUID磁盘分区系统(GPT) 被引入,新结构中,磁盘的分区数不再受限制(在MBR结构下,只能存在4个主分区),另外EFI/UEFI+GUID结合还可以支持2.1 TB以上硬盘(有测试显示,3TB硬盘使用MBR,并且安装Windows 6.x 64位系统,只能识别到2.1TB),并且分区类型将由GUID来表示。在众多的分区类型中,EFI系统分区可以被EFI系统访问,用于存放部分驱动和应 用程序。