UEFI启动阶段DXE-BDS-TSL-RT-AL以及总结_2020-05-13

  1. DXE(Driver Execution Environment,执行驱动配置环境)阶段

    DXE阶段执行系统大部分的初始化工作。由于此阶段内存已经可以被正常使用,因此该阶段可以执行大量复杂的工作。从程序设计角度DXE阶段与PEI阶段相似。

    • DXE阶段的功能:

      • 执行系统大部分的初始化工作
      • 提供系统表、启动服务以及Run Time Services。
    • DXE划分:

      • DXE内核:负责DXE的基础服务和执行流程
      • DXE派遣器:负责调度执行DXE驱动,初始化系统设备。
    • DXE执行流程:

      1. 从DXE入口进入DXE阶段。

      2. 根据HOB列表初始化系统服务。

      3. 调度系统中的Driver。

        详:遍历固件中所有的Driver,当Driver所依赖的资源得到满足时,调度Driver到执行队列执行,直到所有满足条件的Driver都被执行。

      4. 打开EFI_BDS_ARCH_PROTOCOL。

      5. 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的执行流程如下图所示:

      UEFI启动阶段DXE-BDS-TSL-RT-AL以及总结_2020-05-13_第1张图片

  2. BDS(Boot Device Selection,选择boot设备)阶段
    • BDS阶段的功能有:

      • 执行启动策略(主要功能)。
      • 初始化控制台设备。
      • 加载必要的设备驱动。
      • 根据系统设置加载和执行启动项。

      当加载项其启动失败时,系统将重新执行DXE dispatcher以加载更多的驱动,然后重新尝试加载驱动项。BDS策略通过全局NVRAM变量配置,这些变量可以被运行时服务的GetVariable()读取,通过SetVariable()设置(如BootOrder定义了启动顺序,Boot####对应不同的启动项,#为十六进制数)。当用户选中某个启动项(或进入系统默认启动项)后,OS Loader启动,系统进入TSL阶段。

  3. TSL(Transient System Load)阶段

    TSL阶段是OS Loader(操作系统加载器)执行的第一阶段,这一阶段的OS Loader作为一个UEFI应用程序运行,系统资源有UEFI内核控制。但是当ExitBootServices()服务被调用后,系统将进入Run Time阶段。

    TSL阶段被称为临时系统的原因在于,其存在的目的就是为操作系统加载器准备执行环境。虽然是临时系统,但已经具备操作系统的雏形,UEFI Shell是这个临时系统的人机交互界面。正常运行中,系统不会进入UEFI Shell,而是直接执行OS Loader,只有在用户干预或是操作系统加载器出现严重问题时才会进入UEFI Shell。

  4. RT(Run Time,运行)阶段

    系统进入RT阶段后系统控制权从UEFI内核转交至OS Loader,UEFI占用的各种资源被OS Loader接管。随着OS Loader的继续执行,操作系统将完全取得对电脑的控制权。

  5. AL(After Life)阶段

    在RT阶段如果系统(硬件或是软件)遇到灾难性错误,系统固件需要提供错误处理以及灾难恢复机制,这种机制运行在AL阶段。UEFI和UEFI PI均未对AL阶段的行为和规范进行定义。

总结

与BIOS相比,UEFI具有更好的可编程性(PPI、Protocol)、更高的安全性(SEC)、更强的可扩展性,并且其设计相比BIOS能更好的适应64位平台,这使得UEFI能迅速的取代BIOS。

UEFI定义了操作系统和平台间的接口。UEFI接口可以分为以下两个部分:

  1. 启动服务:启动时服务的主要对象是操作系统(OS)、操作系统加载器(OS Loader)以及其他UEFI应用程序和UEFI驱动。操作系统加载器(OS Loader)通过启动服务逐步取得对整个计算机资源的控制。当加载器完全控制计算机软硬件资源后,系统会结束启动服务,进入运行时服务。启动服务主要包括有:时间服务、内存管理、Protocol管理、Protocol使用类服务、驱动管理、Image管理及ExitBootServices服务。
  2. 运行时服务:运行时服务主要的服务对象是操作系统、操作系统加载器以及UEFI应用和UEFI驱动。运行时服务主要包括:时间服务、读写UEFI系统变量服务、虚拟内存服务以及重启系统服务。

你可能感兴趣的:(底层开发,#UEFI,底层应用开发,uefi)