主页 > 最新版官网imtoken > UEFI启动过程分析

UEFI启动过程分析

最新版官网imtoken 2023-03-21 07:39:46

BIOS启动过程

在这里插入图片描述

SEC(Security Phase,安全阶段)阶段

SEC阶段是平台初始阶段的第一阶段。 计算机系统上电后,首先进入这个阶段。

CPU上电后,首先会进行硬件初始化(hard reset)

接下来,将执行可选的自测试过程(BIST 内置自测试)

0xFFFFFFF0开始执行指令,变化后的地址存放的指令为跳转指令(0xfffffff0: ljmp $0xf000, $0xe05b),跳转到执行BIOS代码的地方(0xe05b)

1、SEC阶段的作用:UEFI系统上电或重启后简述比特币系统的运行过程,首先进入SEC阶段。 在SEC阶段,系统执行以下四项任务:

  接收并处理系统启动和重启信号,系统加电信号、系统重启信号、系统运行过程中的异常信号。
  初始化临时存储区域:系统运行在SEC阶段时,仅CPU和CPU内部资源被初始化,而各种外部设备和内存都没有被初始化。因此系统需要一部分临时内存用于代码和数据的存储,一般称为临时RAM,临时RAM只能位于CPU内部(CPU和CPU内部的资源最先被初始化)。
  最常用的临时RAM是Cache,通过将Cache设置为no-eviction模式,来把其当成内存使用(此时读取命中则返回Cache中的数据,读取缺失并不会向主存发出缺失事件;写命中时写入Cache,写缺失时也不会向主存发出缺失事件),这种技术称为CAR(Cache As RAM)。

ARM:静态随机存取存储器。 SRAM一启动就可以访问。 bl1_plat_arch_setup()只是简单的从中分出一块作为c程序的Trusted SRAM,而不是像x86那样从缓存中扣除一块,这样就简单多了; 目前的intel内存初始化处于PEI阶段。 比如ARM厂商或者AMD基本上都是在BIOS启动前先初始化内存。

比特币的交易过程_简述比特币系统的运行过程_简述搭建jsp运行环境的过程

SEC阶段是可信系统的根:作为系统启动的第一部分,只有SEC才能被系统信任,后续阶段才有被信任的基础。 因此,在大多数情况下,SEC 可以在将控制权移交给 PEI 之前验证 PEI 是否可信。

将系统参数传递到下一阶段:SEC阶段的所有工作都是为PEI阶段做准备。 最重要的是将系统的控制权转移给PEI,将SEC阶段的运行信息上报给PEI。 SEC 通过将以下信息作为参数传递给 PEI 的进入程序来向 PEI 报告信息:

系统的当前状态,PEI根据状态值判断系统当前的健康度。

         可启动固件(Boot Firmware Volume)的地址和大小,PEI据此判断可用硬件。
         临时RAM区域的地址和大小。
         栈的地址和大小。

2. SEC阶段执行流程:

根据临时RAM是否初始化到极限简述比特币系统的运行过程,SEC阶段分为两部分:在临时RAM初始化之前,称为Reset Vector阶段; 临时RAM初始化完成后,调用SEC入口函数进入SEC功能区。

Reset Vector的执行过程如下:

· 进入固件界面。

· 从实模式到 32 位平面模式的转换。

在固件中找到 BFV(引导固件卷)。

简述搭建jsp运行环境的过程_简述比特币系统的运行过程_比特币的交易过程

• 在 BFV 中找到 SEC 图像。

· 如果是64位系统,从32位模式切换到64位模式。

·调用SEC入口函数。

初始化SEC功能区的临时RAM,完成其功能后找到PEI的入口函数()

PEI(Pre-EFI Initialization,预EFI初始化)阶段

一、PEI阶段的作用:

初始化内存

建造滚刀;

为 DXE 阶段准备执行环境。

2. PEI部门:

PEI核心(PEI Foundation):负责PEI基础服务和流程。

PEIM dispatcher:查找系统中所有的PEIM,并根据PEIM之间的依赖关系依次执行

(1)PEIM是否已经执行

简述比特币系统的运行过程_简述搭建jsp运行环境的过程_比特币的交易过程

(2)PEI驱动的文件格式是否正确可读

(3) 司机可信

(4)检查依赖是否满足)

PEI阶段系统的初始化主要由PEIM完成。 (执行不同的PEIM时,必须提前执行依赖的PEIM,相关准备工作)

每个 PEIM 都是一个独立的模块。 通过PEIServices,PEIM可以调用PEI阶段提供的系统服务。 通过调用这些服务,PEIM 可以访问 PEI 内核。

PPI (PEIM-to-PEIM Interfaces) PEIM之间的通信是通过PPI完成的。

在这里插入图片描述

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

DXE 阶段执行系统的大部分初始化。 由于这个阶段内存已经可以正常使用了,所以这个阶段可以进行很多复杂的工作。从程序设计的角度来看,DXE阶段和PEI阶段类似

1. DXE阶段的功能:

执行系统的大部分初始化

提供系统表、启动服务和运行时服务。

DXE事业部:

简述比特币系统的运行过程_比特币的交易过程_简述搭建jsp运行环境的过程

DXE kernel:负责DXE的基础服务和执行流程

DXE Dispatcher:负责调度执行DXE驱动,初始化系统设备。

2.DXE执行过程:

从DXE入口进入DXE阶段->根据HOB列表初始化系统服务->调度系统中的Driver。

在这里插入图片描述

具体内容:遍历固件中所有的驱动程序,当满足驱动程序依赖的资源时,将驱动程序派发到执行队列中执行,直到所有满足条件的驱动程序执行完毕。

打开 EFI_BDS_ARCH_PROTOCOL。

EFI_BDS_ARCH_PROTOCOL->条目。

DXE 驱动程序通过协议进行通信。 协议是一种特殊的结构。 每个协议都有一个 GUID。 通过系统BootServices的OpenProtocol,可以根据GUID调用相应的Protocol,从而使用这个Protocol提供的服务。

所有驱动执行完毕后,系统初始化,DEX通过EFI_BDS_ARCH_PROTOCOL找到BDS并调用BDS的入口函数,从而进入BDS阶段(本质上说BDS是一个特殊的DXE Driver)。

BDS(Boot Device Selection,选择启动设备)阶段

1、BDS阶段的作用是:

执行启动策略(主要功能)。

简述比特币系统的运行过程_简述搭建jsp运行环境的过程_比特币的交易过程

初始化控制台设备。

加载必要的设备驱动程序。

根据系统设置加载并执行启动项。

当加载项启动失败时,系统会重新执行DXE dispatcher加载更多驱动,然后再次尝试加载驱动。

BDS 策略通过全局 NVRAM 变量配置。 这些变量可以通过运行时服务的GetVariable()读取,通过SetVariable()设置(如BootOrder定义了启动顺序,Boot####对应不同的启动项,#为十六进制数)。当用户选择启动项(或进入系统默认启动项),OS Loader启动,系统进入TSL阶段

TSL(瞬态系统负载)阶段

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

TSL阶段之所以被称为临时系统,是因为它的目的是为操作系统加载器准备执行环境。 虽然它是一个临时系统,但它已经有了操作系统的雏形。 UEFI Shell就是这个临时系统的人机交互界面。 可以理解为shell是一种特殊的OS。 在实际使用过程中,厂商通常会启动 Shell item 来去掉,所以最终用户看不到这一点。 正常运行时,系统不会进入UEFI Shell,而是直接执行OS Loader,只有在用户干预或操作系统加载器出现严重问题时才会进入UEFI Shell。

RT(Run Time,运行中)阶段

系统进入RT阶段后,系统控制权从UEFI内核转移到OS Loader,UEFI占用的各种资源由OS Loader接管。 随着OS Loader的继续执行,操作系统将完全控制计算机。 在这个阶段,BIOS已经退出舞台,OS开始执行。

AL(来世)阶段

在RT阶段,如果系统(硬件或软件)遇到灾难性错误,系统固件需要提供错误处理和灾难恢复机制,运行在AL阶段。 UEFI 和 UEFI PI 都没有定义 AL 阶段的行为和规范。

《UEFI原理与编程戴正华》中的文章大量引用了戴正华先生的书,并加入了自己的一些感悟