uefi_1

引言

统一可扩展固件接口(UEFI)规范是操作系统与平台固件之间的接口描述,其前身是可扩展固件接口规范 1.10(EFI),规范中出现的EFI名称均可视为UEFI的一部分(除非另有说明)。

UEFI是纯粹的接口规范,以数据表的形式提供平台相关信息以及操作系统(OS)和其加载器(OS Loader)所使用的启动服务(Boot Services)和运行时服务(Runtime Services),通过仅传递引导所需的关键信息,在平台固件与操作系统之间构建了一个完全抽象的软件接口,从而实现了对硬件复杂性的解耦。

比如同样进行内存探测,早期的x86架构依赖实模式下的E820、E801、0x88中断,而ARM架构则需要ATAGS传参或解析设备树信息,内核(Kernel)必须针对不同平台固件实现不同的底层探测逻辑,而在UEFI环境下,内核只需要找到EFI_BOOT_SERVICES表并调用GetMemoryMap()接口,返回的永远是标准的EFI_MEMORY_DESCRIPTOR结构体数组。

UEFI规范实现了从移动端到服务器的全平台覆盖,其提供的核心服务及接口服务在实现标准化的同时允许平台引入增强性能的新特性和功能,为OEM厂商提供了最大的扩展性和定制能力,实现其差异化。UEFI的目标就是实现从传统”PC-AT”式启动环境转向现代无传统API环境。

概述

UEFI允许通过加载UEFI驱动程序(UEFI driver)和UEFI应用程序(UEFI application)扩展平台固件。UEFI驱动程序和UEFI应用程序被加载后可以访问所有UEFI定义的运行时和启动服务。

图2.1 启动顺序

UEFI允许将操作系统加载器和平台固件的启动菜单合并到一个平台固件菜单,其允许用户从任何受UEFI启动服务支持的启动介质上的任何分区中选择任何UEFI操作系统加载程序,一个UEFI操作系统加载器可以支持多个选项,另外平台固件的启动菜单还可以包含传统的启动选项。

相较于传统引导环境必须通过MBR启动后才能实现多重引导(Multiboot),UEFI规范允许固件直接解析并读取系统分区(ESP)中的程序,实现固件菜单和引导菜单的逻辑合一,操作系统加载器通过在NVRAM中注册多个启动项让用户可以直接在固件层面进行选择,同时兼容性支持模块(CSM)的存在确保UEFI对传统引导模式的向下兼容。

UEFI支持从包含UEFI操作系统加载程序或UEFI定义的系统分区的介质启动,UEFI需要UEFI定义的系统分区才能从块设备启动,UEFI不需要对分区的首扇区进行任何更改,因此满足条件的介质既能在传统架构上启动,也能在UEFI平台上启动。