2. 简单了解UEFI 系统的启动过程

一、基本流程
 遵从PI标准,分为7个阶段。
 2. 简单了解UEFI 系统的启动过程
 具体流程如下:
 2. 简单了解UEFI 系统的启动过程当系统硬件或操作系统出现严重错误不能继续正常运行时,固件会尝试修复错误,这时系统进入AL期。但PI规范和UEFI规范都没有规定AL期的行为。“?”号表示其行为由系统供应商自行定义。

二、

  • SEC (Security Phase) - 安全验证
     1) 接收和处理系统的启动,重启,异常信号;
     2) 初始化临时存储区域:此时仅CPU和CPU内部资源被初始化,外部设备和内存都没有初始化,在Cache上开辟一段空间作为内存使用,满足C语言运行所需要的内存和堆栈。
     3)作为可信系统的根:作为取得对系统控制权的第一部分,SEC阶段是整个可信系统的根。SEC能被系统信任,以后的各个阶段才有被信任的基础。通常,SEC在将控制权转移给PEI之前,可以验证PEI。
     4) 传递参数给PEI阶段
      可启动固件(Boot Firmware Volume)的地址和大小。
      临时RAM区域的地址和大小。
      栈的地址和大小。
  • PEI (Pre-EFI Initialization) - EFI前期初始化
     1) 在PEI阶段主要为DXE阶段准备执行环境,主要做CPU相关硬件初始化,最主要是对于内存的初始化,将DXE阶段需要的参数以HOB列表的形式进行封装,传递给DXE阶段。
     2) 从功能上讲,PEI可分为以下两部分:
    PEI 内核(PEI Foundation):负责PEI基础服务和流程。
    PEIM(PEI Module)派遣器:主要功能是找出系统中的所有PEIM,并根 据PEIM之间的依赖关系按顺序执行PEIM。PEI阶段对系统的初始化主要是 由PEIM完成的。
    如图:
    2. 简单了解UEFI 系统的启动过程3. DXE (Driver Execution Environment) - 驱动执行环境
  1. 执行大部分系统初始化工作,进入此阶段时,内存已经可以被完全使用,因而此阶段可以进行大量的复杂工作。可以完成大量的驱动加载和初始化工作。遍历固件中所有的Driver,当Driver所依赖的资源都满足要求时,调度Driver到执行队列执行,直到所有的Driver都被加载和执行完毕,系统完成初始化。
  2. 流程图如下:
    2. 简单了解UEFI 系统的启动过程4. BDS(Boot Device Selection)- 设备启动选择
     主要功能是执行启动策略,其主要功能包括:
    1) 初始化控制台设备。
    2) 加载必要的设备驱动。
    3) 根据系统设置加载和执行启动项

如果加载启动项失败,系统将重新执行DXE dispatcher以加载更多的驱动,然后重新尝试加载启动项。BDS策略通过全局NVRAM变量配置。这些变量可以通过运行时服务的GetVariable()读取,通过SetVariable()设置。用户选中某个启动项(或系统进入默认的启动项)后,OS Loader启动,系统进入TSL阶段。

  1. TSL(Transient System Load)- 操作系统加载前期

1)是操作系统加载器(OS Loader)执行的第一阶段,在这一阶段OS
Loader作为一个UEFI应用程序运行,系统资源仍然由UEFI内核控制。当启动服务的ExitBootServices()服务被调用后,系统进入RunTime阶段。
2) TSL阶段之所以称为临时系统,在于它存在的目的就是为操作系统加载器准备执行环境。虽然是临时系统,但其功能已经很强大,已经具备了操作系统的雏形,UEFI Shell是这个临时系统的人机交互界面。正常情况下,系统不会进入UEFI Shell,而是直接执行操作系统加载器,只有在用户干预下或操作系统加载器遇到严重错误时才会进入UEFI Shell。

  1. RT(Run Time)
    系统的控制权从UEFI内核转交到OS Loader手中,UEFI占用的各种资源被回收到OS Loader,因此要清理和回收一些之前被UEFI占用的资源,RT Services随着操作系统的运行提供相应的运行时的服务,这个期间一旦出现错误和异常,将进入AL进行修复。

  2. AL 系统灾难恢复前期
    如果系统(硬件或软件)遇到灾难性错误,系统固件需要提供错误处理和灾难恢复机制,这种机制运行在AL(After Life)阶段。UEFI和UEFI PI标准都没有定义此阶段的行为和规范,根据厂家自定义修复方案。

参考书籍:《UEFI原理与编程》