UEFI概述

UEFI的核心是后面的FI(固件接口),即它本身是个协议,需要硬件和软件的支持。

硬件和固件厂商都已提供,对于内核开发者来说,需要做的就是编写一个UEFI应用程序来加载内核。

UEFI启动过程

1. SEC(安全验证)

计算机系统加电后进入此阶段。

  • 进入固件入口
  • 从实模式进入32位平坦模式
  • 定位固件中的BFV(Boot Firmware Volume)
  • 定位BFV中的SEC映像
  • 从32位模式进入64位模式
  • 调用SEC入口函数
  • 利用CAR(Cache As Ram)技术初始化栈
  • 调用PEI入口函数
2. PEI(EFI前期初始化)

将需要传递给DXE的信息组成HOB(Handoff Block)列表,然后将控制权转交到DXE手中。

  • 初始化PS(PEI Core Service)
  • 调度系统中的PEIM(PEI模块)
  • 准备HOB列表
  • 调用DXE入口函数
3. DXE(驱动执行环境)

执行大部分系统初始化工作。

  • 根据HOB列表初始化系统服务
  • 调度系统中的驱动
  • 调用BDS入口函数
4. BDS(启动设备选择)

BDS被认为是一种特殊的DXE阶段的应用程序,主要执行启动策略。

  • 初始化控制台设备
  • 加载必要的设备驱动
  • 加载和执行启动项
5. TSL(操作系统加载前期)

OS Loader运行的阶段,OS Loader是一个UEFI应用程序。此时系统资源仍由UEFI内核控制。默认运行OS Loader,但如果用户干预则进入UEFI Shell。当ExitBootServices()服务被调用后,则进入RT阶段。

6. RT(操作系统运行)

OS获得系统控制权。

7. AL(After Life)

为系统固件提供错误处理和灾难恢复机制。