菜单

kaoqi
kaoqi
发布于 2026-07-31 / 7 阅读
0
0

UEFI的PEI和DXE阶段

PEI Pre-EFI Initialization阶段:在内存未就绪环境下初始化内存控制器,检测物理内存,构建HOB链表传递硬件信息至下一阶段。

DXE Driver Execution Environment阶段:加载驱动程序全面初始化芯片组、总线以及外设,构建Boot Services与Runtime Services框架。

可以说,这两个阶段就对应了主要的BIOS过程,是硬件初始化的主要代码阶段。

PEI阶段时,由于内存没有初始化,向要利用C语言来做一些丰富功能的开发,最关键的点在于需要大量地使用”栈“。

在这个阶段,将从CPU上的资源触发,比如从CPU缓存Cache作为栈,来调度PEI Module,最终进入DXE阶段。

PEI结束时会将系统状态通过HOB的与位置无关的数据结构列表传递到DXE阶段。

DXE阶段中会执行大部分系统初始化,具体来说是针对整个主板进行大量的驱动工作。

DXE Foundation生成一组BOOT Services、Runtime Services、以及DXE Services。

DXE Dispatcher负责按正确的顺序发现和执行DXE Driver。

DXE Drivers负责初始化处理器、芯片组和平台组件,以建立控制台并尝试引导OS。

DXE阶段提供的所有服务都可以通过System Table的指针进行访问。

UEFI的Protocol概念:

UEFI使用Handle来指代我们需要初始化的诸多设备对象,驱动将以protocol的形式安装到这个Handle上。Protocol本质是一个结构体,这个结构体内存了很多的函数来实现不同的功能。Protocol就是一套函数集合+一个GUID。

在EDK2的框架下,使用API函数来进行Install、Opeb、Locate。UEFI架构下,大部分设备的初始化流程都包装进入了protocol中。


评论