UEFI启动流程

UEFI启动流程

2023-03-17
bios

BIOS在计算机系统中的作用 #

  • BIOS全称为基本输入输出系统,时存储在主板ROM中的一组程序代码,包括:
    • 加电自检程序,用于开机时对硬件的检测。
    • 系统初始化代码,包括硬件设备的初始化等。
    • 基本的外围I/O处理的子程序代码。
    • CMOS设置程序。

UEFI系统组成 #

  • UEFI提供给操作系统的接口包括启动服务(Boot Services,BS)和运行时服务(Runtime Service,RT)以及丰富的Protocol。
  • 从OS Loader被加载,到OS Loader执行ExitBootServices这段时间内,是从UEFI环境向操作系统过渡的过程。这个过程中,OS Loader通过BS和RT使用UEFI提供的服务,将计算机系统资源逐渐转移到自己手中,这个过程称为TSL。
  • 当OS Loader完全掌握了计算机系统资源时,BS也完成了使命。OS Loader调用ExitBootServices结束BS并回收BS占用的资源,之后计算机系统进入UEFI Runtime阶段。
  • 在Runtime阶段只有RT继续为OS提供服务,BS已经从计算机系统中销毁。

  • UEFI Images 包含可执行代码的二进制文件。
  • UEFI Services 是平台调用接口的集合,允许UEFI程序和操作系统调用。
  • UEFI Protocol 是一种数据结构,包含全局唯一标识符GUID、接口数据结构和服务。
  • UEFI System Table 所有UEFI镜像都会接到一个指向UEFI系统表的指针,通过它可以访问固件提供的UEFI Protocol。
  • 启动服务提供的服务项包括:
    • Event服务:允许程序进行异步操作。
    • Timer(定时器)服务:配合Event提供定时器的功能。
    • 内存管理:提供内存的分配和释放服务,管理系统的内存映射。
    • Protocol服务:
    • Image服务:
    • 其他服务:
  • 运行时服务提供的服务项包括:
    • 系统变量服务:读取或设置系统变量。
    • 时间服务:提供读取和设定系统时间的功能。
    • 内存虚拟地址服务:提供将内存的物理地址转换为虚拟地址的服务。
    • 其他服务:如重启系统、更新BIOS等。

UEFI系统的启动过程 #

1. SEC阶段(Security Phase) #

  • UEFI系统开机或重启进入SEC阶段,它执行以下四种任务:
    • 接收并处理系统启动和重启信号。
    • 初始化临时存储区域:系统运行在SEC阶段时,仅CPU初始化,各种外部设备和内存都没有被初始化,因此系统需要一些临时的RAM区域。 临时RAM只能位于CPU内部。
    • 作为可信系统的根:作为取得对系统控制权的第一部分,SEC阶段是整个可信系统的根。
    • 传递系统参数给下一阶段:SEC阶段的一切工作都是为PEI阶段准备,最终将控制权交给PEI,同时要将现阶段的成果汇报给PEI。汇报的手段是将如下信息作为参数传递到PEI的入口函数。
      • 系统当前状态。
      • 可启动固件的地址和大小。
      • 临时RAM区域的地址和大小。
      • 栈的地址和大小。

2. PEI阶段(Pre-EFI Initialization) #

  • PEI主要是为DXE准备执行环境,PEI的执行流程如下:
  • 从功能上来讲,PEI可以分为:
    • PEI内核(PEI Foundation):负责PEI基础服务和流程。
    • PEIM(PEI Module)派遣器:找到系统中所有的PEI模块,并根据依赖关系按顺序执行PEIM。PEI阶段对系统的初始化主要是由PEIM完成的。
  • PEIM之间的通信是通过PPI(PEIM-to-PEIM Interfaces)完成。
  • 在PEI阶段会初始化内存。

3. DXE阶段(Drier Execution Environment) #

  • DXE阶段内存可以完全被使用,DXE执行阶段的流程如下:
  • DXE从功能上可以分为以下两部分:
    • DXE内核:负责DXE基础服务和执行流程。
    • DXE派遣器:负责调度执行DXE驱动,初始化系统设备。
  • 每个DXE驱动是一个独立的模块,DXE驱动之间通过Protocol通信。Protocol是一个特殊的结构体,每个Protocol对应一个GUID。
  • 当所有的Driver都执行完后,系统完成初始化,调用BDS的入口函数,进入到BDS阶段。

4. BDS阶段(Boot Device Selection) #

  • 主要功能是执行启动策略:
    • 初始化控制台设备。
    • 加载必要的设备驱动。
    • 根据系统设置加载和执行启动项。
  • 用户选中的某个启动项后,OS Loader启动,系统进入TSL阶段。

5. TSL阶段(Transient System Load) #

  • TSL是OS Loader执行的第一阶段,在这个阶段OS Loader作为一个UEFI应用程序运行,系统资源仍由UEFI内核控制。
  • 当启动服务的ExitBootServices服务被调用后,系统进入Run Time阶段。
  • TSL阶段被称为临时系统,它存在的目的就是为操作系统加载器准备执行环境。

6. RT阶段(Run Time) #

  • 系统进入RT阶段后,系统的控制权从UEFI内核转交到OS Loader手中,UEFI占用的各种资源被回收到OS Loader,仅有UEFI运行时服务保留给OS Loader和OS使用。
  • 随着OS Loader的执行,OS最终取得对系统的控制权。

7. AL阶段(After Life) #

  • 在RT阶段,如果系统遇到灾难性错误,固件需要提供错误处理和灾难恢复机制。