2023-03-17
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阶段,如果系统遇到灾难性错误,固件需要提供错误处理和灾难恢复机制。