UEFI启动阶段学习SEC阶段和PEI阶段_2020-05-12
昨天学习了UEFI和BIOS的区别,以及UEFI系统的优点。今天学习UEFI系统驱动的七个不同阶段。
UEFI系统的启动过程
UEFI系统从加电到关机可分为以下七个阶段:
SEC(安全验证)->PEI(EFI前期初始化)->DXE(驱动执行环境)
->BDS(BS?)(启动设备选择)->TSL(操作系统加载前期)
->RT(Run Time)
->AL(系统灾难恢复期)
其中,前三个阶段为UEFI初始化加载阶段,DXE阶段结束后UEFI环境已经准备完毕。
BDS和TSL是UEFI运行OS Loader的阶段。
OS Loader调用ExitBootServices()服务后系统启动进入RT阶段,操作系统加载后期和操作系统运行期均属于RT阶段。
硬件系统或操作系统出现严重错误不能继续正常运行时,固件会尝试进行修复,此时系统进入AL期。但是PI规范和UEFI规范都没有规定AL期的行为。AL期的系统行为由系统供应商自行定义。
上述过程可见下图:
每个阶段具体的功能和流程:
SEC(Security Phase,安全阶段)阶段
SEC(Security Phase)阶段时平台初始话的第一个阶段,计算机系统加电后首先进入这个阶段。
SEC阶段的功能:UEFI系统开机或重启后首先进入SEC阶段,SEC阶段系统执行以下四种任务:
- 接收并处理系统启动和重启信号,系统加电信号、系统重启信号、系统运行过程中的异常信号。
- 初始化临时存储区域:系统运行在SEC阶段时,仅CPU和CPU内部资源被初始化,而各种外部设备和内存都没有被初始化。因此系统需要一部分临时内存用于代码和数据的存储,一般称为临时RAM,临时RAM只能位于CPU内部(CPU和CPU内部的资源最先被初始化)。最常用的临时RAM是Cache,通过将Cache设置为no-eviction模式,来把其当成内存使用(此时读取命中则返回Cache中的数据,读取缺失并不会向主存发出缺失事件;写命中时写入Cache,写缺失时也不会向主存发出缺失事件),这种技术称为CAR(Cache As RAM)。
- SEC阶段是可信系统的根:作为系统启动的第一部分,只有SEC能被系统信任,以后的各个阶段才有被信任的基础。因此,大部分情况下SEC再转交控制权给PEI前可以验证PEI是否可信。
- 传递系统参数给下一阶段:SEC阶段的一切工作都是为PEI阶段做准备的,最重要把系统的控制权转交给PEI,并将SEC阶段的运行信息汇报给PEI。SEC通过将以下信息作为参数传递给PEI的入口程序来向PEI汇报信息:
- 系统当前状态,PEI根据状态值判断系统当前的健康情况。
- 可启动固件(Boot Firmware Volume)的地址和大小,PEI据此判断可用硬件。
- 临时RAM区域的地址和大小。
- 栈的地址和大小。
SEC阶段执行流程:
根据临时RAM是否初始化为界限,SEC阶段分为两部分:临时RAM初始化前称为Reset Vector阶段;临时RAM初始化后调用SEC入口函数从而进入SEC功能区。其流程如下图:
其中Reset Vector的执行流程如下:
- 进入固件接口。
- 从实模式转换到32位平坦模式。
- 定位固件中的BFV(Boot Firmware Volume)。
- 定位BFV中的SEC影响。
- 如果是64位系统,则从32位模式转换至64位模式。
- 调用SEC入口函数。
PEI(Pre-EFI Initialization,预先EFI初始化)阶段
虽然SEC阶段对CPU和CPU内的资源进行了初始化,但是PEI阶段可用的资源依旧十分有限,该阶段对内存进行初始化,主要功能是为DXE阶段准备执行环境,将所需要传递给DXE的信息组成HOB(Hand Off Block)列表,最终将控制权转交到DXE。
UEFI具有模块化设计的特点,PEI就是一个模块。PEI Image的入口函数调用PEI模块的入口函数PEICore。
PEI阶段的功能:
- 初始化内存。
- 为DXE阶段准备执行环境。
PEI划分:
PEI内核(PEI Foundation):负责PEI基础服务和流程。
PEIM(PEI Module)派遣器:找出系统中的所有PEIM,并根据PEIM之间的依赖关系按顺序执行PEIM。PEI阶段对系统的初始化主要由PEIM完成。
每个PEIM都是一个独立的模块。通过PEIServices,PEIM可以调用PEI阶段(UEFI?)提供的系统服务。通过调用这些服务,PEIM可以访问PEI内核。PEIM之间的的通信通过PPI(PEIM-to-PEIM Interfaces)完成。
PEI阶段执行流程:
进入PEI入口。
根据SEC阶段传入的信息初始化PS(PEI Core Service)。
调度系统中的PEIM(PEI Module),准备HOB列表。
具体调用的系统中的PEIM有:CPU PEIM(提供CPU相关功能,如进行Cache设置、主频设置等);平台相关PEIM(初始化内存控制器、I/O控制器等);内存初始化PEIM(对内存进行初始化,此时内存才可用,之前使用的CPU模拟的临时内存)。
调用PEIServices得到DEX IPL PPI的Entry服务(即DEXLoadCore)。
注:PPI与DEX阶段的Protocol类似,每个PPI都是一个结构体,包含有函数指针和变量。每个PPI都有一个GUID。通过PEIServices的LocatePPI服务可以找到GUID对应的PPI实例。
DXELoadCore服务找出并运行DXEImage的入口函数,将HOB列表传递给DXE。
PEI阶段执行流程完整描述:SEC模块找到PEI Image的入口函数 _ModuleEntryPoint(该函数位于MdePkg/Library/PeimEntryPoint/PeimEntryPoint.c), _ModuleEntryPoint函数最终调用PEI模块的入口函数PEICore(该函数位于MdeModulePkg/Core/Pei/PeiMain/PeiMain.c),进入PEICore后,首先根据从SEC阶段出入的信息设置PEI Core Services,然后调用PEIDispatcher执行系统总的PEIM,在内存初始化完成后,系统切换栈并重新进入PEICore。重新进入PEICore后使用的不再是 临时RAM 而是真正的内存。在所有PEIM执行完成后,调用PEIServices的LocatePPI服务得到DXE IPL PPI,并调用DXE IPL PPI的Entry服务(即DEXLoadCore),找出DEX Image的入口函数,执行DXE Image函数并将HOB列表传递给DXE。
PEI阶段执行流程如下图:
UEFI启动阶段学习SEC阶段和PEI阶段_2020-05-12相关推荐
- UEFI之PEI阶段
文章目录 一.PEI 简介 二.相关名词解释 三.PEI 流程 3.1 PEI执行顺序 3.2 PeiMain.inf 3.3 函数PeiCore() 四.PEIM 4.1 PEIM简介 4.2 PE ...
- UEFI中PEI阶段Hob的描述
转自: http://blog.csdn.net/cassienj/article/details/46892141 HOB:Hand-off Block 在PEI的执行过程中,PEI Phase提供 ...
- UEFI源码学习01-ARM AARCH64编译、ArmPlatformPriPeiCore(SEC)
文章目录 1. AARCH64编译环境搭建 2. ArmPlatformPriPeiCore 2.1 QEMU_EFI.fd包含了什么 2.2 QEMU virt aarch64相关 2.3 从第一条 ...
- easyuefi只能在基于uefi启动的_云计算学习体系-1.1-计算机硬件基础扩展知识BIOS/UEFI/MBR/GPT...
我们每天都在用电脑,很多人可能每天都要面对多次Windows的启动过程,可是您知道在Windows的启动过程背后,你真真了解过吗?上文中我们认识了计算机的基本硬件,其中讲到BIOS和UEFI,下次内容 ...
- Java web阶段学习总结(华清远见)
标题Java web阶段学习总结 经过web前端的学习之后,我们开启了Java web后端的学习. 学习一样新的东西首先要了解它的原理,以及所要具备的一些条件.对于Servlet 的开发步骤一般有:新 ...
- java基础知识点_零基础学习Java语言,各个阶段需要掌握的知识点
随社会的脚步的不断发展,Java技术在不断的与时俱进,这也是Java一直长盛不衰的原因之一.Java技术的学习,永远没有早晚之分,技不压身,对于21世纪的我们80后,90后,甚至00后,尤其适用! 那 ...
- 2018年计算机职称考试冲刺,2018年中级会计职称考试冲刺阶段学习计划
2018年中级会计师考试冲刺阶段复习时间段是8月12日至9月8日.经过前面一段时间的复习,相信考生已经对全书的内容有了一定的了解和掌握.在此小编为大家总结了2018年中级会计职称考试冲刺阶段学习计划, ...
- PHP学习线路图:四个阶段
[PHP学习线路图:四个阶段] 按PHP学习线路图中的指引,可以将学习PHP的过程分为4个阶段,一步步前行,为每个阶段 设定一个学习目标,并安排好学习计划,达到目标后就可以开启下一阶段的学习. &l ...
- 大数据培训课程各阶段学习内容,为什么学这些课程
大数据培训课程都有阶段呢?每个阶段包含了哪些内容,为什么要学习这些课程,加米谷大数据来解答. 一.第一阶段:静态网页根底(HTML+CSS) 1.难易程度:一颗星 2.课时量(技能知识点+阶段项目使命 ...
最新文章
- 测试使用2mH的工字型电感在接收150kHz导航信号中性能
- x-code 4.61 无证书真机调试
- centos php.ini redis,CentOS下安装Redis及Redis的PHP扩展
- 创建一个简单的 MDM server(1)
- C++编程(一):匈牙利命名法
- 用python画动态三维轨迹_python 画3维轨迹图并进行比较的实例
- 为什么被喷的总是产品经理?
- 华为P30将在3月26日发布
- 微信小程序的剪贴板 +复制剪贴,在淘宝中打开就可以获取到商品
- arduino雨滴传感器和舵机控制
- 基于matlab的电力系统输电仿真,基于MATLAB电力系统线路运行的仿真与分析
- C++信息学奥赛一本通_1072
- 电阻触摸屏和电容触摸屏你更喜欢哪一个?
- 常见十大量化投资策略
- echarts修改数据视图格式
- 健身知识 / 动作图解(待全)
- Android原生webView概述
- 日本人为什么不吃小龙虾!
- linux下查看本机IP的两种方法
- 高通烧录软件QPST的介绍和使用方法
热门文章
- WPF绑定XML数据源
- 人在四合院:我变成了何雨柱(二)
- scrapy微博反爬虫_Scrapy 爬取新浪微博(解析api)
- MTD,文件系统,存储器分区的个人理解
- 小强IT游记之大连行
- ppt打印一页6张铺满不留白_你真的会做ppt?这些习惯和操作你有吗?
- HBase常见面试题
- 单片机高手是这样炼成的!这样学习单片机事半功倍
- 这是什么“虎狼之词”啊!!!程序员的健康问题,看一线老中医怎么说!!!
- c51中断优先级c语言,基于proteus的51单片机开发实例(14)中断嵌套和中断优先级...