EFI新一代的图形化BIOS

BIOSBasic Input/Output System,基本输入/输出系统)是电脑必备的元素之一,它是用户对电脑进行最初设置和操作的环境。BIOS早在20年多前就已经出现在电脑上,从最初的“Read Only”(只读,不能修改)发展到能让用户自动升级,中间经历过多次进化。虽然BIOS先后有过多次改变,增加了一些新功能,但现阶段电脑的BIOS仍然沿用20多年前的基本模式,在软件和硬件均高速发展的环境下,老式BIOS渐渐跟不上电脑的发展步伐了。在一切讲求人性化的今天,BIOS的弊端也不断显现。首先,其刷新BIOS的方法太过繁琐,虽然许多主板厂商都推出了在Windows下刷新BIOS的工具,但是也仅仅是完成简单的刷新。对比起其他设备的飞速发展,BIOS却裹足不前,也日渐满足不了现代科技的需要。其次,BIOS使用低级的机器语言,编程相当复杂且困难,BIOS更新时间往往很漫长,在未来PC架构逐步成型的今天,古老的BIOS也需要一些改革。Intel就在酝酿这样一个革新方案。

EFI全称Extensible Firmware Interface EFI (可扩展固件接口)Intel用来替代现行BIOS的一项技术。其实早在2000年就开始研发,加入其中的还有AdaptecAMIATI、惠普、LSI、微软、PowerQuest等公司。首个版本为0.92,到现在已经发展到1.10版本。EFI原先仅是针对IA-64处理器所设计的,直到IDF 2003上才被推上舞台,正式拉开了BIOS的变革序幕。

Intel EFI的首席工程师Mark DoranIDF 2003上指出了BIOS的许多缺点。例如,BIOS的设计者无法预计BIOS可以使用多久,因此也就在设计上留下了隐患。BIOS联接着硬件与操作系统,可是这个联接没有标准。不同生产商之间的BIOS也是不同的。生产商可以随心所欲地修改和配置。用户通过BIOS配置系统和诊断问题时,往往起不了太大的作用。即使有经验的老手有时也可能在BIOS的问题上感到困惑。

EFI启动管理程序

EFI则可以解决以上这些问题。从核心来看,EFI或许更像一个被简化的操作系统。介于硬件设备以及高级操作系统(比如Windows或者Linux)之间。它提供了一个支持鼠标的图形界面,从上图的启动界面我们就可以看出,它与纯文本、界面单调的普通BIOS明显不同。传统的BIOS受到容量的限制,需要相当紧凑、低级的机器语言。事实上,机器语言一直掌握在少数工程师的手中,而EFI却使用全球最广泛的高级语言C语言进行编写,这就意味着有更多的工程师可以参与EFI的开发工作,添加许多更有价值的功能。为了保证充裕的容量,EFI彻底抛弃了ROM,其文件系统存储在硬盘独立划定的区域内。

EFI具备的基本功能为:

1.无需操作系统的磁盘管理、启动管理工具;

2.远程配置、引导;

3.脱离操作系统的平台管理工具。

EFI的工作模式可以简单归纳为:启动系统,标准固件平台初始化,接着从加载EFI驱动程序库以及及执行相关程序,在EFI系统启动菜单中选取所要进入的系统并向EFI提交启动引导代码,正常的话将进入系统,否则将中止启动服务并返回EFI系统启动菜单。EFI可以替代BIOS的功能,而且在特殊功能得到了强化。比如系统死机后,用户可以进入EFI,通过改变配置,载入不同的驱动程序等手段解决操作系统出现的问题。EFI符合TCP/IP网络协议,用户可以在EFI界面使用网络资源,进行远程诊断,但这不适用于DOSLinux等系统。工程师们也可以按照不同的需要为EFI增加新的功能,诸如更加详细实用的诊断功能、自我配置程序、列出系统可能发生的故障等等。

EFI的产生

众所周知,英特尔在近二十年来引领以x86系列处理器为基础的PC技术潮流,它的产品如CPU,芯片组等在PC生产线中占据绝对领导的位置。因此,不少人认为这一举动显示了英特尔公司欲染指固件产品市场的野心。事实上,EFI技术源于英特尔安腾处理器(Itanium)平台的推出。安腾处理器是英特尔瞄准服务器高端市场投入近十年研发力量设计产生的与x86系列完全不同的64位新架构。在x86系列处理器进入32位的时代,由于兼容性的原因,新的处理器(i80386)保留了16位的运行方式(实模式),此后多次处理器的升级换代都保留了这种运行方式。甚至在含64位扩展技术的至强系列处理器中,处理器加电启动时仍然会切换到16位的实模式下运行。英特尔将这种情况归咎于BIOS技术的发展缓慢。自从PC兼容机厂商通过净室的方式复制出第一套BIOS源程序,BIOS就以16位汇编代码,寄存器参数调用方式,静态链接,以及1MB以下内存固定编址的形式存在了十几年。虽然由于各大BIOS厂商近年来的努力,有许多新元素添加到产品中,如PnP BIOSACPI,传统USB设备支持等等,但BIOS的根本性质没有得到任何改变。这迫使英特尔在开发更新的处理器时,都必须考虑加进使效能大大降低的兼容模式。有人曾打了一个比喻:这就像保时捷新一代的全自动档跑车被人生套上去一个蹩脚的挂档器。

然而,安腾处理器并没有这样的顾虑,它是一个新生的处理器架构,系统固件和操作系统之间的接口都可以完全重新定义。并且这一次,英特尔将其定义为一个可扩展的,标准化的固件接口规范,不同于传统BIOS的固定的,缺乏文档的,完全基于经验和晦涩约定的一个事实标准。基于EFI的第一套系统产品的出现至今已经有五年的时间,如今,英特尔试图将成功运用在高端服务器上的技术推广到市场占有率更有优势的PC产品线中。

比较EFIBIOS

一个显著的区别就是EFI是用模块化,C语言风格的参数堆栈传递方式,动态链接的形式构建的系统,较BIOS而言更易于实现,容错和纠错特性更强,缩短了系统研发的时间。它运行于32位或64位模式,乃至未来增强的处理器模式下,突破传统16位代码的寻址能力,达到处理器的最大寻址。它利用加载EFI驱动的形式,识别及操作硬件,不同于BIOS利用挂载实模式中断的方式增加硬件功能。后者必须将一段类似于驱动的16位代码,放置在固定的0x000C00000x000DFFFF之间存储区中,运行这段代码的初始化部分,它将挂载实模式下约定的中断向量向其他程序提供服务。例如,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协议栈。

一些人认为BIOS只不过是由于兼容性问题遗留下来的无足轻重的部分,不值得为它花费太大的升级努力。而反对者认为,当BIOS的出现制约了PC技术的发展时,必须有人对它作必要的改变。

EFI和操作系统

EFI在概念上非常类似于一个低阶的操作系统,并且具有操控所有硬件资源的能力。不少人感觉它的不断发展将有可能代替现代的操作系统。事实上,EFI的缔造者们在第一版规范出台时就将EFI的能力限制于不足以威胁操作系统的统治地位。首先,它只是硬件和预启动软件间的接口规范;其次,EFI环境下不提供中断的访问机制,也就是说每个EFI驱动程序必须用轮询的方式来检查硬件状态,并且需要以解释的方式运行,较操作系统下的驱动效率更低;再则,EFI系统不提供复杂的存储器保护功能,它只具备简单的存储器管理机制,具体来说就是指运行在x86处理器的段保护模式下,以最大寻址能力为限把存储器分为一个平坦的段,所有的程序都有权限存取任何一段位置,并不提供真实的保护服务。当EFI所有组件加载完毕时,系统可以开启一个类似于操作系统Shell的命令解释环境,在这里,用户可以调入执行任何EFI应用程序,这些程序可以是硬件检测及除错软件,引导管理,设置软件,操作系统引导软件等等。理论上来说,对于EFI应用程序的功能并没有任何限制,任何人都可以编写这类软件,并且效果较以前MS-DOS下的软件更华丽,功能更强大。一旦引导软件将控制权交给操作系统,所有用于引导的服务代码将全部停止工作,部分运行时代服务程序还可以继续工作,以便于操作系统一时无法找到特定设备的驱动程序时,该设备还可以继续被使用。

EFI的组成

一般认为,EFI由以下几个部分组成:

1. Pre-EFI初始化模块

2. EFI驱动执行环境

3. EFI驱动程序

4. 兼容性支持模块(CSM)

5. EFI高层应用

6. GUID 磁盘分区

在实现中,EFI初始化模块和驱动执行环境通常被集成在一个只读存储器中。Pre-EFI初始化程序在系统开机的时候最先得到执行,它负责最初的CPU,主桥及存储器的初始化工作,紧接着载入EFI驱动执行环境(DXE)。当DXE被载入运行时,系统便具有了枚举并加载其他EFI驱动的能力。在基于PCI架构的系统中,各PCI桥及PCI适配器的EFI驱动会被相继加载及初始化;这时,系统进而枚举并加载各桥接器及适配器后面的各种总线及设备驱动程序,周而复始,直到最后一个设备的驱动程序被成功加载。正因如此,EFI驱动程序可以放置于系统的任何位置,只要能保证它可以按顺序被正确枚举。例如一个具PCI总线接口的ATAPI大容量存储适配器,其EFI驱动程序一般会放置在这个设备的符合PCI规范的扩展只读存储器(PCI Expansion ROM)中,当PCI总线驱动被加载完毕,并开始枚举其子设备时,这个存储适配器旋即被正确识别并加载它的驱动程序。部分EFI驱动程序还可以放置在某个磁盘的EFI专用分区中,只要这些驱动不是用于加载这个磁盘的驱动的必要部件。在EFI规范中,一种突破传统MBR磁盘分区结构限制的GUID磁盘分区系统(GPT)被引入,新结构中,磁盘的分区数不再受限制(MBR结构下,只能存在4个主分区),并且分区类型将由GUID来表示。在众多的分区类型中,EFI系统分区可以被EFI系统存取,用于存放部分驱动和应用程序。很多人担心这将会导致新的安全性因素,因为EFI系统比传统的BIOS更易于受到计算机病毒的攻击,当一部分EFI驱动程序被破坏时,系统有可能面临无法引导的情况。实际上,系统引导所依赖的EFI驱动部分通常都不会存放在EFIGUID分区中,即使分区中的驱动程序遭到破坏,也可以用简单的方法得到恢复,这与操作系统下的驱动程序的存储习惯是一致的。CSM是在x86平台EFI系统中的一个特殊的模块,它将为不具备EFI引导能力的操作系统提供类似于传统BIOS的系统服务。

BIOS的终结,未来PC的展望

EFI凭借自己自身的技术特点,可以广泛运用于嵌入式应用、网络电脑、网络客户端电脑等产品。目前EFI应用于Intel64位处理器Itanium上,如果要在32位平台上使用可能还需要一段时间。目前AppleMac系统是第一个支持EFIx86架构的系统,微软的windowsVista64sp1也已经支持,并声称下一代操做系统windows7也将支持EFI,也许EFI离我们真的已经不远了。

 

 

  • 来源:网络
  • 时间:2008-11-14 11:25:45

北京正高集群信息科技有限公司-正高动态

联系我们

  • 地址:北京市海淀区上地信息路30号上地大厦七层7019
  • 邮编:100085
  • 电话:010-51268258
  • 传真:010-51268258转8003
  • Email:zghpc@yahoo.com.cn