-
DXE(Driver Execution Environment,执行驱动配置环境)阶段
DXE阶段执行系统大部分的初始化工作。由于此阶段内存已经可以被正常使用,因此该阶段可以执行大量复杂的工作。从程序设计角度DXE阶段与PEI阶段相似。
-
DXE阶段的功能:
- 执行系统大部分的初始化工作
- 提供系统表、启动服务以及Run Time Services。
-
DXE划分:
- DXE内核:负责DXE的基础服务和执行流程
- DXE派遣器:负责调度执行DXE驱动,初始化系统设备。
-
DXE执行流程:
-
从DXE入口进入DXE阶段。
-
根据HOB列表初始化系统服务。
-
调度系统中的Driver。
详:遍历固件中所有的Driver,当Driver所依赖的资源得到满足时,调度Driver到执行队列执行,直到所有满足条件的Driver都被执行。
-
打开EFI_BDS_ARCH_PROTOCOL。
-
EFI_BDS_ARCH_PROTOCOL->Entry。
DXE驱动之间通过Protocol通信。Protocol是一种特殊的结构体,每个Protocol都有一个GUID,通过系统BootServices的OpenProtocol,可以根据GUID调用对应的Protocol,从而使用这个Protocol提供的服务。
在所有的Driver都执行完成后,系统完成初始化,DEX通过EFI_BDS_ARCH_PROTOCOL找到BDS并屌用BDS的入口函数,从而进入BDS阶段(从本质上讲BDS是一种贴无数的DXE)。
DXE的执行流程如下图所示:
-
-
-
BDS(Boot Device Selection,选择boot设备)阶段
-
BDS阶段的功能有:
- 执行启动策略(主要功能)。
- 初始化控制台设备。
- 加载必要的设备驱动。
- 根据系统设置加载和执行启动项。
当加载项其启动失败时,系统将重新执行DXE dispatcher以加载更多的驱动,然后重新尝试加载驱动项。BDS策略通过全局NVRAM变量配置,这些变量可以被运行时服务的GetVariable()读取,通过SetVariable()设置(如BootOrder定义了启动顺序,Boot####对应不同的启动项,#为十六进制数)。当用户选中某个启动项(或进入系统默认启动项)后,OS Loader启动,系统进入TSL阶段。
-
-
TSL(Transient System Load)阶段
TSL阶段是OS Loader(操作系统加载器)执行的第一阶段,这一阶段的OS Loader作为一个UEFI应用程序运行,系统资源有UEFI内核控制。但是当ExitBootServices()服务被调用后,系统将进入Run Time阶段。
TSL阶段被称为临时系统的原因在于,其存在的目的就是为操作系统加载器准备执行环境。虽然是临时系统,但已经具备操作系统的雏形,UEFI Shell是这个临时系统的人机交互界面。正常运行中,系统不会进入UEFI Shell,而是直接执行OS Loader,只有在用户干预或是操作系统加载器出现严重问题时才会进入UEFI Shell。
-
RT(Run Time,运行)阶段
系统进入RT阶段后系统控制权从UEFI内核转交至OS Loader,UEFI占用的各种资源被OS Loader接管。随着OS Loader的继续执行,操作系统将完全取得对电脑的控制权。
-
AL(After Life)阶段
在RT阶段如果系统(硬件或是软件)遇到灾难性错误,系统固件需要提供错误处理以及灾难恢复机制,这种机制运行在AL阶段。UEFI和UEFI PI均未对AL阶段的行为和规范进行定义。
总结
与BIOS相比,UEFI具有更好的可编程性(PPI、Protocol)、更高的安全性(SEC)、更强的可扩展性,并且其设计相比BIOS能更好的适应64位平台,这使得UEFI能迅速的取代BIOS。
UEFI定义了操作系统和平台间的接口。UEFI接口可以分为以下两个部分:
- 启动服务:启动时服务的主要对象是操作系统(OS)、操作系统加载器(OS Loader)以及其他UEFI应用程序和UEFI驱动。操作系统加载器(OS Loader)通过启动服务逐步取得对整个计算机资源的控制。当加载器完全控制计算机软硬件资源后,系统会结束启动服务,进入运行时服务。启动服务主要包括有:时间服务、内存管理、Protocol管理、Protocol使用类服务、驱动管理、Image管理及ExitBootServices服务。
- 运行时服务:运行时服务主要的服务对象是操作系统、操作系统加载器以及UEFI应用和UEFI驱动。运行时服务主要包括:时间服务、读写UEFI系统变量服务、虚拟内存服务以及重启系统服务。