概述
DXE是在PEI阶段之后的下一个阶段。它实现了驱动环境的搭建(UEFI第三阶段)。
DXE阶段执行了大量的系统初始化工作,在PEI的基础上,进入此阶段时,内存已经可以被完全使用,因此此阶段可以进行大量复杂的工作。DXE驱动之间通过Protocol通信。当所有的Driver都执行完毕后,系统完成初始化,接着会执行一个特殊的DXE Driver 的Protocol进而进入BDS阶段。从本质上讲,BDS是一种特殊的DXE阶段的应用程序。
整体流程
- DxeMain是DXE阶段执行的主函数,入口函数。根据以参数形式接受PEI阶段生成的HOB表,初始化系统服务。
VOID EFIAPI DxeMain ( IN VOID *HobStart )
- 首先初始化内存服务,创建EFI System Table,在随后被执行的DXE Driver中逐步完善此table。
// // Initialize Memory Services // CoreInitializeMemoryServices (&HobStart, &MemoryBaseAddress, &MemoryLength); MemoryProfileInit (HobStart);
- 生成Boot Services / Run Time Services / DXE Services.
- 调用DXE Dispatcher,所有的DXE Driver在这个函数中被检测并执行。
// // Invoke the DXE Dispatcher // //*** AMI PORTING BEGIN ***// // Process DxeCoreInitialize eLink ProcessDxeCoreInitializeHooks(gDxeCoreImageHandle, gDxeCoreST);
-
当所有的DXE Driver被执行完成之后,DXE通过EFI_BDS_ARCH_PROTOCOL找到BDS并调用BDS的入口函数,从而进入BDS阶段。
// // Transfer control to the BDS Architectural Protocol // gBds->Entry (gBds);
可见下图,理解整个DXE流程:
涉及单元及功能
- DXE Core:DXE的核心,负责DXE基础服务和执行流程。负责调度DXE Driver和生成EFI system table,提供Boot Service,Runtime Service ,DXE Service。
- DXE Driver:负责各种硬件的初始化,产生protocol和其他service。DXE驱动有两种类型,一种是符合UEFI驱动模型的,另一种就是不符合的普通DXE Driver。
- Non-Driver Model:
- 分步骤初始化CPU&chipset。
- 生成Architectural protocol供DXE Core或其他的DXE Driver使用。
- 在DXE早期阶段执行。
- 符合标准的UEFI驱动模型:
- 执行此模组时不会对硬件进行初始化操作。
- 注册Driver binding protocol到handle database。
- 注册的protocol在BDS阶段被调用并对硬件进行操作。
- Non-Driver Model:
- DXE dispatcher:DXE core 的一部分,以正确的顺序来搜寻和执行DXE driver,负责调度执行DXE驱动,初始化系统设备。
- DXE Architectural protocol:由DXE driver所产生,是DXE core和hardware沟通的唯一介质,这些Protocol在UEFI BIOS运行的过程中会安装,且一定需要被安装,如果没有被安装的话,系统就会报错。包括:gBds,gCpu,gSecurity,....
DXE阶段主要使用的几类HOB数据
- 可用内存资源信息:类型为EFI_HOB_TYPE_RESOURCE_DESCRIPTOR,用于初始化内存申请与回收服务,提供申请和回收内存的方法。
- DXE模块数据:类型为EFI_HOB_MEMORY_ALLOCATION,子类型Name=gEfiHobMemoryAllocModuleGuid,用于初始化镜像服务,提供加载、解析和执行文件的方法。
- 闪存卷信息:FlashVolume,类型为EFI_HOB_TYPE_FV,对每个闪存卷建立一个PROTOCOL用于读取数据。所有的驱动数据从这里面读取,然后调度执行。
DXE阶段的功能
- 执行系统大部分的初始化工作 。
- 提供系统表、启动服务以及Run Time Services。
- 初始化系统设备,生成Protocol和Handle。
- 执行BDS的入口应用程序,从而进入BDS阶段。