01_UEFI启动流程

发布时间:2026/7/1 4:24:56
01_UEFI启动流程 第1章 UEFI启动流程Boot Flow1.1 原学习内容UEFI 启动流程描述的是一台机器从上电到进入操作系统的完整生命周期。核心主线Power On ↓ SEC ↓ PEI ↓ HOB ↓ DXE ↓ BDS ↓ TSL ↓ RT ↓ OS后续所有知识点例如 HOB、Protocol、Handle、Driver Binding、Variable、Boot Option本质上都依附在这条启动链上。1.2 学习目标本章要解决几个问题机器上电后最先执行什么代码内存什么时候可用UEFI 驱动什么时候加载Windows Boot Manager 是谁启动的ExitBootServices()为什么是 UEFI 与 OS 的分界点1.3 启动流程总览SEC 阶段SEC 是 Security Phase主要任务是建立最小执行环境。核心职责建立最基础 CPU 运行环境 建立临时内存例如 Cache As RAM 验证或定位下一阶段 PEI 入口特点代码少 执行时间短 功能最基础可以理解为SEC 把 CPU 叫醒让 CPU 有能力继续往下跑PEI 阶段PEI 是 Pre-EFI Initialization主要负责早期平台初始化。核心职责CPU 初始化 芯片组初始化 DRAM 初始化 发现 Firmware Volume 创建 HOB 加载 DXE Foundation可以理解为PEI 把机器点亮把最重要的硬件资源准备出来PEI 最重要的成果是DRAM 可用 资源信息明确 HOB List 创建完成 DXE 可以启动HOB 阶段HOB 是 PEI 和 DXE 之间的交接机制。PEI 阶段初始化出的信息例如内存区域、FV 位置、CPU 信息、资源描述等需要传递给 DXE。因此 PEI 会创建 HOB ListDXE Core 启动后解析 HOB List。一句话HOB PEI 写给 DXE 的交接单DXE 阶段DXE 是 Driver Execution Environment是 UEFI Framework 最核心的阶段。核心职责加载 DXE Driver 建立 Handle Database 建立 Protocol 生态 枚举 PCI / USB / SATA / NVMe 等设备 执行 Driver Binding 提供 Boot Services可以理解为DXE 建设完整的 UEFI 驱动运行环境这一阶段会让存储、文件系统、显卡、USB、网络等设备逐渐可用。BDS 阶段BDS 是 Boot Device Selection启动设备选择阶段。核心职责读取 BootOrder 读取 Boot#### 解析 Device Path 选择启动设备 调用 LoadImage() 调用 StartImage() 启动 OS Loader可以理解为BDS 根据启动项决定启动谁例如Windows Boot Manager Linux GRUB UEFI Shell 自定义 EFI ApplicationTSL 阶段TSL 是 Transient System Load主要指操作系统加载器运行的阶段。例如 Windows 环境下BDS 启动 bootmgfw.efi ↓ Windows Boot Manager 运行 ↓ 准备加载 Windows KernelRT 阶段RT 是 Runtime 阶段。当 OS Loader 调用gBS-ExitBootServices(ImageHandle,MapKey);之后UEFI Boot Services 失效OS 接管内存、设备和中断。但部分 Runtime Services 仍保留例如GetVariable() SetVariable() GetTime() ResetSystem() UpdateCapsule()1.4 源码讲解Boot Services 示例DXE、BDS、UEFI Shell App 阶段常见代码gBS-LocateProtocol(...);gBS-InstallProtocolInterface(...);gBS-LocateHandleBuffer(...);gBS-CreateEvent(...);gBS-LoadImage(...);gBS-StartImage(...);这些都属于 Boot Services通常只能在ExitBootServices()之前调用。Runtime Services 示例Runtime 阶段常见代码gRT-GetVariable(...);gRT-SetVariable(...);gRT-GetTime(...);gRT-ResetSystem(...);这些属于 Runtime Services在 OS 启动后仍可能被系统调用。1.5 ChatGPT 讲解UEFI 启动流程可以理解为一场接力赛SEC 把 CPU 叫醒 PEI 把机器点亮 HOB PEI 给 DXE 的交接单 DXE 建设驱动和服务生态 BDS 选择启动目标 TSL OS Loader 接管 RT OS 运行后保留少量 UEFI 服务重点不是死记缩写而是理解每个阶段解决的问题。1.6 标准答案UEFI 启动流程由 SEC、PEI、HOB、DXE、BDS、TSL、RT 和 OS 阶段组成。SEC 负责建立最小执行环境PEI 负责完成早期硬件初始化尤其是内存初始化并通过 HOB 向 DXE 传递信息DXE 负责加载驱动、建立 Handle 和 Protocol 生态BDS 负责根据 BootOption 选择启动设备并启动 OS LoaderOS Loader 调用ExitBootServices()后Boot Services 失效系统进入 Runtime 阶段仅保留部分 Runtime Services。1.7 纠正点误区 1DXE 负责启动 Windows不准确。正确理解DXE 负责建立环境 BDS 负责选择并启动 Windows Boot Manager误区 2PEI 负责加载所有驱动错误。PEI 主要做早期初始化。真正大规模驱动加载和设备枚举发生在 DXE 阶段。误区 3ExitBootServices 后还能调用 gBS错误。ExitBootServices()之后 Boot Services 生命周期结束不能再调用gBS-LocateProtocol()、gBS-AllocatePool()、gBS-CreateEvent()等 Boot Services。1.8 总评重要程度★★★★★ 面试频率★★★★★ 实战关联★★★★★ 理解难度★★☆☆☆本章是整个 UEFI 学习的总纲。只要启动流程没搞清楚后面的 HOB、Protocol、Variable、BootOption 都会变成零散知识点。1.9 总结UEFI 启动流程可以理解为系统从上电到进入操作系统的完整生命周期。首先 SEC 阶段建立最小执行环境随后 PEI 完成 CPU、芯片组和内存等早期初始化并通过 HOB 将平台信息传递给 DXE。DXE 阶段加载驱动并建立 Handle 和 Protocol 生态是 UEFI Framework 的核心阶段。之后 BDS 根据 BootOrder 和 BootOption 选择启动设备通过 LoadImage 和 StartImage 启动 OS Loader。最后 OS Loader 调用 ExitBootServices将控制权交给操作系统只保留 Runtime Services。