
UEFI
新型UEFI,全称“统一的可扩展固件接口”(Unified Extensible Firmware Interface), 是一种详细描述类型接口的标準。这种接口用于作业系统自动从预启动的操作环境,载入到一种作业系统上。
可扩展固件接口(Extensible Firmware Interface,EFI)是 Intel 为 PC 固件的体系结构、接口和服务提出的建议标準。其主要目的是为了提供一组在 OS 载入之前(启动前)在所有平台上一致的、正确指定的启动服务,被看做是有近20多年历史的 BIOS 的继任者。
UEFI是由EFI1.10为基础发展起来的,它的所有者已不再是Intel,而是一个称作Unified EFI Form的国际组织。
基本介绍
- 中文名:统一可扩展固件接口
- 外文名:Unified Extensible Firmware Interface
- 简称:UEFI
- 所有者:Unified EFI Form
用途
BIOS即Basic Input/Output System,翻成中文是“基本输入/输出系统”,是一种所谓的“固件”,负责在开机时做硬体启动和检测等工作,并且担任作业系统控制硬体时的中介角色。
因为硬体发展迅速,传统式(Legacy)BIOS 成为进步的包袱,现在已发展出最新的UEFI(Unified Extensible Firmware Interface)可扩展固件接口,相比传统 BIOS 的来说,未来将是一个“没有特定 BIOS”的电脑时代。
与legacy BIOS 相比,UEFI最大的几个区别在于:
1. 编码99%都是由C语言完成;
2. 一改之前的中断、硬体连线埠操作的方法,而採用了Driver/protocol的新方式;
3. 将不支持X86实模式,而直接採用Flat mode(也就是不能用DOS了,现在有些 EFI 或 UEFI 能用是因为做了兼容,但实际上这部分不属于UEFI的定义了);
4. 输出也不再是单纯的二进制code,改为Removable Binary Drivers;
5. OS启动不再是调用Int19,而是直接利用protocol/device Path;
6. 对于第三方的开发,前者基本上做不到,除非参与BIOS的设计,但是还要受到ROM的大小限制,而后者就便利多了。
7.弥补BIOS对新硬体的支持不足的问题。
结构
UEFI使用模组化设计,它在逻辑上可分为硬体控制和OS软体管理两部分:作业系统—可扩展固件接口—固件—硬体。
根据UEFI概念图的结构,可把uEFI概念划为两部分:uEFI的实体 (uEFI Image)跟平台初始化框架。
uEFI的实体-uEFI Image
(图中蓝框围起部分)
根据uEFI规範定义,uEFI Image包含三种:uEFI Applications, OS Loaders and uEFI Drivers。
启动伫列

uEFI Applications是硬体初始化完,作业系统启动之前的核心套用,比如:启动管理、BIOS设定、uEFI Shell、诊断程式、调度和供应程式、调试套用...等等
OS Loaders是特殊的uEFI Application,主要功能是启动作业系统并退出和关闭uEFI套用。
uEFI Drivers是提供设备间接口协定,每个设备独立运行提供设备版本号和相应的参数以及设备间关联,不再需要基于作业系统的支持。
平台初始化框架
uEFI框架主要包含两部分,一是PEI(EFI预初始化),另一部分是驱动执行环境 (DXE)。
PEI主要是用来检测启动模式、载入主存储器初始化模组、检测和载入驱动执行环境核心。
DXE是设备初始化的主要环节,它提供了设备驱动和协定接口环境界面。
优点
纠错特性
与BIOS显着不同的是,UEFI是用模组化、C语言风格的参数堆叠传递方式、动态连结的形式构建系统,它比BIOS更易于实现,容错和纠错特性也更强,从而缩短了系统研发的时间。更加重要的是,它运行于32位或64位模式,突破了传统16位代码的定址能力,达到处理器的最大定址,此举克服了BIOS代码运行缓慢的弊端。
兼容性
与BIOS不同的是,UEFI体系的驱动并不是由直接运行在CPU上的代码组成的,而是用EFI Byte Code(EFI位元组代码)编写而成的。Java是以“Byte Code”形式存在的,正是这种没有一步到位的中间性机制,使Java可以在多种平台上运行。UEFI也借鉴了类似的做法。EFI Byte Code是一组用于UEFI驱动的虚拟机器指令,必须在UEFI驱动运行环境下被解释运行,由此保证了充分的向下兼容性。
一个带有UEFI驱动的扩展设备既可以安装在使用安卓的系统中,也可以安装在支持UEFI的新PC系统中,它的UEFI驱动不必重新编写,这样就无须考虑系统升级后的兼容性问题。基于解释引擎的执行机制,还大大降低了UEFI驱动编写的複杂门槛,所有的PC部件提供商都可以参与。
滑鼠操作
UEFI内置图形驱动功能,可以提供一个高解析度的彩色图形环境,用户进入后能用滑鼠点击调整配置,一切就像操作Windows系统下的套用软体一样简单。
可扩展性
UEFI将使用模组化设计,它在逻辑上分为硬体控制与OS(作业系统)软体管理两部分,硬体控制为所有UEFI版本所共有,而OS软体管理其实是一个可程式的开放接口。藉助这个接口,主机板厂商可以实现各种丰富的功能。比如我们熟悉的各种备份及诊断功能可通过UEFI加以实现,主机板或固件厂商可以将它们作为自身产品的一大卖点。UEFI也提供了强大的联网功能,其他用户可以对你的主机进行可靠的远程故障诊断,而这一切并不需要进入作业系统。
图形界面
目前UEFI主要由这几部分构成:UEFI初始化模组、UEFI驱动执行环境、UEFI驱动程式、兼容性支持模组、UEFI高层套用和GUID磁碟分区组成。
UEFI初始化模组和驱动执行环境通常被集成在一个唯读存储器中,就好比如今的BIOS固化程式一样。UEFI初始化程式在系统开机的时候最先得到执行,它负责最初的CPU、北桥、南桥及存储器的初始化工作,当这部分设备就绪后,紧接着它就载入UEFI驱动执行环境(Driver Execution Environment,简称DXE)。当DXE被载入时,系统就可以载入硬体设备的UEFI驱动程式了。DXE使用了枚举的方式载入各种汇流排及设备驱动,UEFI驱动程式可以放置于系统的任何位置,只要保证它可以按顺序被正确枚举。藉助这一点,我们可以把众多设备的驱动放置在磁碟的UEFI专用分区中,当系统正确载入这个磁碟后,这些驱动就可以被读取并套用了。在这个特性的作用下,即使新设备再多,UEFI也可以轻鬆地一一支持,由此克服了传统BIOS捉襟见肘的情形。UEFI能支持网路设备并轻鬆联网,原因就在于此。
值得注意的是,一种突破传统MBR(主引导记录)磁碟分区结构限制的GUID(全局唯一标誌符)磁碟分区系统将在UEFI规範中被引入。MBR结构磁碟只允许存在4个主分区,而这种新结构却不受限制,分区类型也改由GUID来表示。在众多的分区类型中,UEFI系统分区用来存放驱动和应用程式。很多朋友或许对这一点感到担心:当UEFI系统分区遭到破坏时怎幺办?而容易受病毒侵扰更是UEFI被人诟病的一大致命缺陷。事实上,系统引导所依赖的UEFI驱动通常不会存放在UEFI系统分区中,当该分区的驱动程式遭到破坏,我们可以使用简单方法加以恢复,根本不用担心。
X86处理器能够取得成功,与它良好的兼容性是分不开的。为了让不具备UEFI引导功能的作业系统提供类似于传统BIOS的系统服务,UEFI还特意提供了一个兼容性支持模组,这就保证了UEFI在技术上的良好过渡。

