UEFI运行原理浅析

  • Post author:
  • Post category:其他


前文提到,UEFI的两个主要功能:

  • 平台初始化(Platform initialization: PI;
  • 启动操作系统;

平台初始化(PI)必须支持6个阶段的处理:

  1. Security (SEC) phase
  2. Pre-EFI Initialization (PEI) phase
  3. Driver Execution Environment (DXE) phase
  4. Boot Device Selection (BDS) phase
  5. Runtime (RT) service phase
  6. After Life (AL) phase

在BDS和RT之间,是由操作系统制造商负责处理的TLS(


Transient System Load


)phase,主要工作是引导操作系统启动。

UEFI阶段示意图

下面我将分别对UEFI在每个阶段的行为作一个简单的介绍。

先理解几个概念;

SPI flash

SPI:Serial Peripheral Interface, 是Motorola 公司推出的一种同步串行接口技术,是一种高速的,全双工,同步的通信总线;

SPI Flash:使用SPI总线接口的Flash,Flash ROM是当今主流的固件存储芯片,BIOS/UEFI以使用NOR Flash为主。

SPI flash在内存中的分布示意图如下:

上电后的内存分布示意图

UEFI的Flash ROM固件由一个或多个Firmware volume(FV)构成,每个FV里存放了FFS Image(EFI Firmware File system),FFS Image则由多个EFI Section构成,EFI Section包含了PE32/PE32+/Coff Image文件。UEFI的固件内存映射情况如下:

UEFI SPI Flash内存映射

各项FV说明:

FV_Recovery:包含UEFI的启动代码(init boot block):SEC和PEI;

FV_MAIN: 压缩的驱动和剩下其余阶段的代码;

FV_Variable Store: UEFI环境下的数据区,包含所有使用的变量;

Other FVs: Microcode updates and other resources;

在上电之后,DMI控制器通过DMI地址总线将 Flash ROM映射到物理内存的4G的最高位内存段,CPU复位CS和EIP寄存器,加载位于0xFFFFFFF0地址的第一条指令, 该地址为Reset Vector(

ResetVectorVtf0.asm

)。

resetVector:
	;
	; Reset Vector
	;
	; This is where the processor will begin execution
	;
	    nop
	    nop
	    jmp     EarlyBspInitReal16
	

	ALIGN   16

IDA SPI SEC反汇编-逻辑地址0xFFF0

Security (SEC) phase

CPU上电后指令跳转到FV_Recovery, 执行UEFI平台初始化(PI)架构中的第一个阶段:SEC;

在SEC阶段执行简单的初始化代码,并会下一阶段准备相关的数据,SEC主要负责事务:

  • 处理所有的平台启动和重置事件;
  • 创建临时内存: (主要使用CPU缓存,此时的内存还未初始化,不可用);
  • 作为整个系统完整性链条的可信根,验证下一个阶段的模块完整性;
  • 向下一个阶段PEI传递信息(hand-off block)

SEC 处理的重置事件包括:

• 从断电状态加电启动系统;

• 系统活动状态下的重启命令;

• 接收到各种异常条件重启;

SEC加载PEI模块时必需向PEI传递的数据:

• PI的当前状态;

• Boot Firmware Volume的位置和大小(用于检索PEIM);

• 临时内存的位置和大小(CPU Cache);

• 栈的位置和大小;

可信根:

在设计安全系统时,后续模块的完整性需要由它的调用者确认,而系统的第一个加载的模块被当作整个系统的可信根模块,在UEFI构架设计中,SEC 就是整个UEFI系统中的可信根(SEC也可以被其他模块验证,比如CPU,相关内容将在下一篇文章《UEFI安全启动》详细介绍)。对于PI构架而言,SEC phase是控制整个系统的初始代码,平台部署时可以在加载下一个阶段PEI之前验证PEI的模块完整性。

Pre-EFI Initialization (PEI) phase

在SEC执行较简单的逻辑处理后就进入PEI phase,PEI phase最初在平台处于初始状态的情况下运行,只能利用处理器上的资源(如作为调用堆栈的处理器缓存)来派遣Pre-EFI初始化模块(PEIM),PEI阶段主要任务是通过PEIM发现内存并对其进行初始化。

PEI phase流程

PEI phase两个主要的PEIMs:


  1. 通常为芯片组内存控制器特有的


    PEIM


    初始化和测试物理内存,通过


    PEI Memory Service





    UEFI


    平台注册内存信息,之后所有的所需内存都从注册的内存信息中申请。

  2. DXE IPL(Initial program load) PEIM,


    在所有其他


    PEIMs


    执行完之后,加载


    DXE


    阶段代码,移交控制权。


除了以上两个


PEIMs


,在


PEI


阶段,也需要对


CPU


和芯片组做一部分的初始化,在调用


DXE IPL


之前,


CPU


需要设置成特定的状态;



在调用DXE IPL之前Intel CPU必需的状态

Driver Execution Environment(DXE) phase

PEI需要完成最基本的环境初始化,以满足DXE模块运行时所需的最小系统状态。PEI在完成初始化后通过PEIM DXE IPL加载DXE的初始模块,并将控制权转移给DXE。DXE是UEFI系统环境中大部分初始化工作的执行阶段;独立硬件制造商IHVs(

Independent hardware vendors

)和OEM将会在DXE中实现驱动,完成硬件的检测和初始化等相关任务。

DXE阶段主要包括三大组件:

  1. DXE Foundation
  2. DXE Dispatcher
  3. DXE驱动

DXE Foundation将构建Boot Services, Runtime Services和DXE Services,而Boot Service和Runtime Service是UEFI固件系统为上层应用提供的基础服务,上层应用通过这两个服务调用UEFI固件系统中的资源,比如获取内存使用情况。

  • Boot Service: 主要提供内存管理、事件、定时器、Image加载卸载、驱动连接等功能,在操作系统启动后失效。
  • Runtime Service:主要提供在UEFI固件环境中的变量相关操作(添加、删除,查找)、时钟、系统重置和虚拟内存等功能,在操作系统启动后仍有效。

Boot Service and Runtime Service向上层提供基础服务

Boot Service和Runtime Service提供的具体服务项


DXE Dispatcher


按照依赖关系和驱动搜索列表,依次加载


DXE


驱动。


DXE


驱动负责初始化


CPU


、芯片组和平台其他组件,

这些组件将提供启动操作系统所需的服务。




DXE




和引导设备选择




(BDS)




一起协同工作,建立控制台并尝试引导操作系统,



当操作系统成功引导时,


DXE


阶段终止。


Boot Device Selection (BDS) phase

在所有的DXE驱动都执行完成之后,UEFI的系统环境就已准备完毕;UEFI将通过应用程序启动管理器加载BDS阶段的Boot Code,并根据引导策略(如windows bcdedit)引导操作系统启动。操作系统引导程序由操作系统制造商提供,因此操作系统制造商可以自定义系统引导行为,比如安全启动(Secure Boot)。如果BDS阶段任务操作失败,将退回到DXE阶段去重新执行驱动检测。

BDS阶段的主要任务:

  • 初始化控制台(显示引导菜单)
  • 加载设备驱动;
  • 启动所选引导项;

UEFI中OS的启动流程



Transient System Load


由操作系统制造商实现启动程序,引导操作系统启动,以windows为例,感兴趣的同学请参看《Windows Internal》;

Windows Boot Sequence

Runtime(RT)

此时的操作系统已经启动,控制权由UEFI移交给了操作系统,在此阶段,UEFI的runtime service依旧有效,在加载操作引导模块时,会传递runtime service的地址,通过此地址,可以使用runtime service提供的功能服务;

After Life(AL)

由UEFI的驱动组成,用于在操作系统关闭、睡眠、休眠或者重启时保存系统的状态。

参考文档:

《EDK II Build Specification》

《UEFI Platform Initialization (PI) Specification》

《UEFI Firmware Security Concerns and Best Practices》—— Phoenix Technologies Ltd.

《Unified Extensible Firmware Interface (UEFI) Specification》

《Beyond BIOS: Developing with the Unified Extensible Firmware Interface 2nd edition》



版权声明:本文为chenpy1987原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。