前两天在98上看到一个帖子 windows 8 没法和linux共存? 里面有一个概念就是EFI

什么是EFI?

EFI英文全称为Extensible Firmware Interface,中文译为可扩展固件接口,其主要目的是为了提供一组在 OS 加载之前(启动前)在 所有平台上一致的、正确指定的启动服务。EFI最初由Intel开发,并在2002年12月所发布1.1版,后来在2005年Intel将此规范交由UEFI论坛 来推广与发展,并更名为Unified EFI(UEFI)。

EFI是一种个人电脑系统规格,用来定义操作系统与系统固件之间的软件界面,为替代BIOS的升级方案。可扩展固件接口(EFI)负责 加电自检(POST)、连系操作系统以及提供连接操作系统与硬件的接口。UEFI在EFI基础上增加与改进了加密编码(cryptography)、 网络认证(network authentication)与用户界面架构(User Interface Architecture)等方面的内容。EFI在软件层次中的位置如下图

为什么有EFI?

EFI技术源于英特尔安腾处理器(Itanium)平台的推出。安腾处理器是英特尔瞄准服务器高端市场投入近十年研发力量设计产生的 与x86系列完全不同的64位新架构。在x86系列处理器进入32位的时代,由于兼容性的原因,新的处理器(80386)保留了16位的运行方式(实模式), 此后多次处理器的升级换代都保留了这种运行方式。甚至在含64位扩展技术的至强系列处理器中,处理器加电启动时仍然会切换到16位的 实模式下运行。英特尔将这种情况归咎于BIOS技术的发展缓慢。

为什么这么说呢?因为自从PC兼容机厂商通过净室的方式复制出第一套BIOS源程序,BIOS就以16位汇编代码,寄存器参数调用方式, 静态链接,以及1MB以下内存固定编址的形式存在了十几年。虽然由于各大BIOS厂商近年来的努力,有许多新元素添加到产品中, 如PnP BIOS,ACPI,传统USB设备支持等等,但BIOS的根本性质没有得到任何改变。这迫使英特尔在开发新的处理器时,都必须考虑加进 使性能大大降低的兼容模式。有人曾打了一个比喻:这就像保时捷新一代的全自排跑车,被人套上去一个蹩脚打档器。正是在这种背景下, Intel发展了EFI技术。

EFI与操作系统又有什么关系呢?

上文提到EFI是BIOS的升级版,那么EFI与OS的关系是不是也和BIOS与OS的关系一样呢?
要回答这个问题,我们首先得将EFI与BIOS进行一个详细的比较:
(1)EFI运行于32位或64位模式,突破传统的BIOS的16位实模式,达到处理器的最大寻址;
(2)EFI利用加载驱动的形式,识别及操作硬件,不同于BIOS利用挂载真实模式中断的方式增加硬件功能;
(3)EFI大部分(99%)是用模块化的C语言编写的,较BIOS而言更易于实现,容错和纠错特性更强,更易于扩展;
(4)EFI系统下的驱动并不是由可以直接运行在CPU上的代码组成的,而是用EFI Byte Code编写而成的(有点像Java 的Byte Code),这是一组专用于EFI驱动的虚拟机器语言,必须在EFI驱动运行环境(Driver Execution Environment,或DXE) 下被解释运行,这就保证了充分的向下兼容性;
(5)UEFI内置图形驱动功能,可以提供一个高分辨率的彩色图形环境,用户进入后能用鼠标点击调整配置,一切就像操作Windows 系统下的应用软件一样简单。BIOS将不再是高手才能玩转的工具,光这一点就足以让很多菜鸟朋友心仪不已了。
(6)强大的可扩展性是UEFI的另一大优点。我们都知道,当电脑出现故障导致无法进入操作系统时,我们往往要借助其他工具才能 解决问题,BIOS在诊断系统故障方面的作用实是在太小了。不过,UEFI将不会重蹈BIOS功能单一的覆辙!UEFI使用模块化设计,它在 逻辑上分为硬件控制与OS(操作系统)软件管理两部分,硬件控制为所有UEFI版本所共有,而OS软件管理其实是一个可编程的开放接口。 借助这个接口,主板厂商可以实现各种丰富的功能。比如我们熟悉的各种备份及诊断功能可通过UEFI加以实现,主板或固件厂商可以 将它们作为自身产品的一大卖点。如果你更习惯让别人来维护机器,UEFI也可提供强大的联网功能,其他用户可以对你的主机进行 可靠的远程故障诊断,而这一切并不需要进入操作系统!

由以上比较可知,EFI在开机时的作用和BIOS一样,就是初始化PC,但在细节上却有很多不一样。BIOS对PC的初始化,只是按照 一定的顺序对硬件通电,简单地检查硬件是否能工作,而EFI不但检查硬件的完好性,还会加载硬件在EFI中的驱动程序,不用操作 系统负责驱动的加载工作。 对于很多非专业人士而言,EFI的最革命之处,就在于颠 覆了BIOS的界面概念,让操作界面和Windows 一样易于上手。在EFI的操作界面中,鼠标成为了替代键盘的输入工具,各功能调节的模块也做的和Windows程序一样,可以说,EFI 就是一个小型化的Windows系统。

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

Original Link: http://ibillxia.github.io/blog/2012/09/23/EFI-and-operating-system/
Attribution - NON-Commercial - ShareAlike - Copyright © Bill Xia