EFI,新一代BIOS技术解析
EFI的出现第一次被正式提出,是在2000年的Intel春季IDF上,经过几次修订,现在已经到了EFI 2.0版本。EFI早在2000年时由Inetl提出的标准,从某个角度来讲,Intel在当时推出EFI主要为将来电脑固件能兼容于各种不同架构平台布局;例如EFI可运用在Itanium、台式PC甚至XScale平台上。最初,共同发展EFI的业者包括Intel、AMI和台湾业者Insyde,后来由于EFI确实具有足够的前瞻性,产业间成立了EFI(Unified EFI)论坛,共同开发适用于各平台的PC固件标准。EFI有多个值得推动的目标,包括增加固件建置时的模块化功能、使用C语言而非汇编语言(Assembly language),以及提供一个简化的方法,方便把新技术整合到PC。运用EFI系统的研发业者,能轻易设定固件以配合特定的硬件组合,或是支持如开机屏幕等客制化功能,并且把新硬件的驱动程序加入开机程序。EFI亦可以为PC带来定义完善的操作系统前运作状态,让厂商不必进入Windows操作系统便能执行诊断测试,同时供应各种执行功能。
在EFI的架构包括平台驱动程序、EFI驱动程序、兼容性支持模块和最底层“准EFI模块”等几部分,就是BIOS业者所提供的程序范围。在Intel的定义里,准EFI模块即与现有BIOS相当。
EFI的最大特点,采用模块化设计的EFI BIOS,基本上区分成硬件控制和OS软件两大模块,前者只要是相同版本的EFI BIOS,就会有相同的功能,后者则是给厂商用C语言撰写应用功能的开放接口。通过这个开放接口,厂商就可以自行编写出各种功能的插件(Plug-in),像是类似Ghost的系统备份/还原插件、类似IE的浏览器插件、类似Anti-Virus的防病毒插件等功能来增加自家产品的功能特色。
如上图,位于底部的是硬件层,与硬件层直接交互的就是EFI的驱动执行环境(Driver Execution Environment),它包括协议架构(Procotol architecture)、平台驱动(Platform driver)、框架驱动(Framework driver)以及兼容支持模块(Compatibility support module)等模块化组件,再往上才是EFI以及兼容模式的实现。在整个EFI系统中,驱动执行环境处于基础性地位,它也被称为“Pre-EFI-Foundation(预EFI基础)”。在驱动执行环境的各个组件中,负责与硬件直接交互的便是协议架构(Architecture protocol)模块,它具备与硬件直接交流的能力。在实际执行时,EFI对硬件参数的定义都是通过协议架构来传递的,这一点EFI与传统BIOS并无本质的区别。而决定EFI实现功能的是平台驱动和框架驱动,两者共同为EFI的实际执行提供完整的支撑。同时,EFI系统也包含一个兼容支持模块(Compatibility support module,简称CSM),它可以在16位实模式下启动计算机以及访问扩展设备的ROM(只读存储器)。这样,即便PC平台中的部分硬件没有专门为EFI设计(例如显卡、声卡等),EFI的兼容支持模块也可以让它们在整个系统中正常工作,从而有效降低从BIOS到EFI过渡的门槛。