Bios实习 学习篇- 2.DXE阶段核心功能详解
DXE 是 UEFI 启动流程中最核心、最复杂的阶段。
它从 PEI 交接来的 HOB 列表出发,建立完整的 UEFI 系统服务环境,发现并调度 DXE 驱动,构建 Handle/Protocol 为中心的协议数据库,并逐步把平台组织成一个可被 BDS 使用、可供 OS Loader 接管的标准预启动环境。
1. DXE 的起点:接收 HOB,接管系统状态
PEI 通过 DXE IPL PPI 把 HOB List 传给 DXE Foundation。
HOB 中记录了启动模式、已初始化内存、固件设备、Firmware Volume、I/O 与 MMIO 等关键信息,DXE 以此为依据建立后续的内存服务、资源视图和驱动发现流程。HOB 对 DXE 来说应视为只读。
2. DXE 的第一职责:建立系统服务与资源管理
DXE Foundation 本身通过一组 DXE Architectural Protocols 与底层硬件解耦,并基于这些协议生成 UEFI System Table、Boot Services、Runtime Services 和 DXE Services。
其中 Boot Services 提供内存分配、事件、协议处理、镜像加载等基础能力;DXE Services 尤其负责 GCD 级别的系统内存、MMIO 和 I/O 资源管理。
3. DXE Dispatcher:按依赖调度驱动,而不是简单顺序加载
DXE Dispatcher 负责从 Firmware Volume 中发现 DXE 驱动,并根据 a priori file 与 Depex 共同决定执行顺序。
a priori file 提供强顺序,适用于平台希望固定优先级的关键驱动;Depex 用于根据协议依赖动态判断驱动是否可以执行。驱动在执行前还要经过安全认证。若 BDS 后续发现了新的固件卷,还可以再次调用 Dispatcher。
4. 协议系统:DXE 模块化设计的核心
UEFI 采用 Handle + Protocol 模型组织设备与服务。
Handle 表示系统中的一个对象节点,Protocol 是挂载在其上的 GUID 标识接口。驱动通过安装协议发布能力,其他模块通过 Locate/Handle/Protocol Handler Services 发现并使用这些能力;通过 RegisterProtocolNotify(),系统还可以在某协议出现时自动通知等待者,形成事件驱动的依赖推进机制。
5. DXE 驱动分两层理解
一类是 Early DXE Drivers,通常负责早期平台/处理器/芯片组初始化以及 Architectural Protocol 的提供;另一类是遵循 UEFI Driver Model 的标准驱动,这类驱动在入口阶段通常只注册 EFI_DRIVER_BINDING_PROTOCOL,真正对控制器做支持检测与启动,是在后续 ConnectController() 驱动连接过程中完成的。
6. DXE 的终点:为 BDS 和 OS Loader 提供可用环境
DXE 的结果不是“驱动都装完了”这么简单,而是系统已经拥有统一的服务接口、可查询的协议数据库、可连接的驱动模型和完整的资源管理能力。
在此基础上,BDS 才能建立控制台、发现启动设备、选择启动项;OS Loader 也才能使用 Boot Services 获取内存映射、访问设备,并在 ExitBootServices() 后接管平台。
查看10道真题和解析