UEFI Boot Flow 系列之 SEC Phase
为什么要有SEC Phase?
1. 需要用汇编语言来完成C无法处理的工作,如C语言无法处理CPU的特殊寄存器(MSR,MTRR,CRX)。
2. C语言需要Memory当成Stack来处理Local 变数,而刚开机Memory还没有被初始化,还不可用,所以需要CAR(Cache As Ram)的初始化。
3. 让CPU进入Protected Mode(Flat Mode)。
SEC Phase的任务
SEC Phase是整个UEFI Boot过程中的第一个阶段,它主要完成的任务有:
1. 系统上电/重启的入口,处理所有的平台restart events,包括开机,重启,或是各种异常条件下的启动。
2. 创建一块临时的内存区域,在系统内存初始化之前使用,比如用CAR(Cache As Ram)或SRAM。
3. 在安全方面,是信任链的根(the root of trust)。之后模块的任何安全相关的设计都必须有个根,而因为系统开机之后最初的代码实现是在SEC阶段,所以平台设计者在调用PEI Foundation之前可以在SEC阶段验证PEI Foundation的安全性。所以说SEC阶段是系统信任链的根。
4. 传送Handoff信息到PEI Foundation(这才是SEC Phase的最终目的),这些信息包括:
1>.平台的状态,
2>.BFV(Boot Firmware Volume)的位置和大小,
3>.临时RAM的位置和大小,
4>. 栈的位置和大小。
数据结构为:EFI_PEI_STARTUP_DESCRIPTOR。
typedef struct {
UINTN BootFirmwareVolume;
UINTN SizeOfCacheAsRam;
EFI_PEI_PPI_DESCRIPTOR *DispatchTable;
} EFI_PEI_STARTUP_DESCRIPTOR;
另外,还有一个PPI:EFI_SEC_PLATFORM_INFORMATION_PPI 可以用来传送Handoff信息。在SEC_PLATFORM_INFORMATION_PPI.PlatformInformation()中定义了一个EFI_HEALTH_FLAGS,它包含了Processor,hardware,and/or安腾处理器中PLA(Processor Abstract Layer)代码中关于处理器Reset上的状态信息。
SEC阶段代码流程图:
PEI Core Entry Point 是如何确定的?
是由Build Tool来确定的。在Build出来的bin file位置0xFFFFFFE0存放。
BFV Base Address是如何确定的?
是由Build Tool来确定的。在Build出来的bin file位置0xFFFFFFFC存放。
Refer to:
Pre-EFI Initialization Core Interface Version 1.2
UEFI Boot Flow 系列之 SEC Phase相关推荐
- Spring Boot干货系列:(六)静态资源和拦截器处理 | 掘金技术征文
原本地址:Spring Boot干货系列:(六)静态资源和拦截器处理 博客地址:tengj.top/ 前言 本章我们来介绍下SpringBoot对静态资源的支持以及很重要的一个类WebMvcConfi ...
- Spring Boot实战系列《六》:人事管理系统的登录设计
Spring Boot实战系列<六>:人事管理系统的登录设计 Spring Boot实战系列<六>:人事管理系统的登录设计 1.前言 在上一篇中教大家在IEDA或者eclips ...
- springboot 拦截器_Spring Boot入门系列(十)如何使用拦截器,一学就会!
前面介绍了Spring Boot 如何整合定时任务已经Spring Boot 如何创建异步任务,不清楚的朋友可以看看之前的文章:https://www.cnblogs.com/zhangweizhon ...
- Spring Boot 实战系列课程终于齐啦~
Spring Boot 如今已成为 Java 开发必学技术,其可以大大简化 Spring 应用的初始搭建以及开发过程. Spring Boot 不仅支持直接嵌入 Tomcat,Jetty 或 Unde ...
- Spring Boot入门系列(十六)整合pagehelper,一秒实现分页功能!
之前讲了Springboot整合Mybatis,然后介绍了如何自动生成pojo实体类.mapper类和对应的mapper.xml 文件,并实现最基本的增删改查功能.接下来要说一说Mybatis 的分页 ...
- Spring Boot干货系列:数据存储篇-SQL关系型数据库之MyBatis的使用
Spring Boot干货系列:数据存储篇-SQL关系型数据库之MyBatis的使用 前言 上篇我们介绍了Spring Boot对传统JdbcTemplate的集成,这次换一下,介绍下Spring B ...
- UEFI boot: how does that actually work, then?
本文转载于: https://www.happyassassin.net/2014/01/25/uefi-boot-how-does-that-actually-work-then/ 本文翻译于:ht ...
- Spring/Boot/Cloud系列知识(2)— — 代理模式
本文转自:https://blog.csdn.net/yinwenjie/article/details/77848285 代理模式是23种设计模式中的一种,属于一种结构模式.用一句大白话解释这个设计 ...
- Spring/Boot/Cloud系列知识:SpringMVC进行HTTP信息接收和发送的过程(1)
1.整体调用过程 本文承接本专题上一篇文章<Spring/Boot/Cloud系列知识:HttpMessageConverter转换器使用方式>,在上一篇文章中讲解了HttpMessage ...
最新文章
- python之CSV文件格式
- 射频放大器芯片3阶截点计算与芯片选择
- mysql入门之事务处理
- 设计ADuC845低噪声信号采集版
- Bash中的$*和$@的区别
- 频谱泄露 振动 matlab,关于MATLAB FFT频谱泄露和加窗
- Java JUC工具类--Semaphore
- Android官方开发文档Training系列课程中文版:通知用户之大视图通知
- MyBatis-Plus_AR 模式
- Shell脚本编程30分钟入门
- 宋星:误读数据等于自杀
- 华为中兴为何对未来信心十足?
- h5加java棋牌_Html5斗地主棋牌架设Canvas实现斗地主游戏代码解析
- 亚马逊被人差评了怎么办?
- jsp servlet mysql实现的java学生选课系统源码附带高清视频指导运行教程及论文
- 输入某学生的考试成绩,输出对应等级A、B 、C、 D、E
- 修复我的世界ice服务器的指令,我的世界 基岩版:服务器清理命令
- IntelliJ IDEA设置修改字体大小与样式
- java8的时期和时间
- linux的tar命令之-N参数详解
热门文章
- 域名过户操作流程及常见问题
- 计算机日常英语句子,计算机英语句子
- 关于移动H3_2s光猫获得超级密码的步骤以及上传本地配置文件覆盖光猫的配置文件的方法
- 职称计算机ppt,2017年职称计算机考试(PPT练习题大全)(3)
- 如何让Join跑的更快?(文末送书)
- Win11控制面板快捷键 Win11打开控制面板的多种方法
- 盖茨自说不善招聘、管理:善于“借力”
- Android生态系统分裂剖析 开放性系统带来的影响
- fastdfs安装部署整理
- 用 StarRocks on ES 实现 分词