博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UEFI Boot Flow 系列之 SEC Phase
阅读量:4159 次
发布时间:2019-05-26

本文共 1319 字,大约阅读时间需要 4 分钟。

本文章转载于http://blog.csdn.net/celiaqianhj/article/details/6782493

 
为什么要有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

你可能感兴趣的文章
深度学习入门(上)-第一章 必备基础知识点
查看>>
ubuntu unzip解压时提示错误 解决方法
查看>>
sprintf函数的说明
查看>>
BOOST_TYPEOF和BOOST_AUTO 作用
查看>>
随机森林概述
查看>>
2011十大战略技术
查看>>
大学应该学的软件知识
查看>>
腾讯与360战争背后的云计算阴影
查看>>
腾讯看了会沉默,360看了会流泪
查看>>
李开复:移动互联网机会最大 微博会现最大赢家
查看>>
2006年的IT十大战略技术
查看>>
操作系统介绍
查看>>
Desktop Linux: The Dream Is Dead
查看>>
我的9年IT路
查看>>
任正非:让用户像用电一样享受云计算
查看>>
学习技术的几个境界
查看>>
计算机世界:免费的代价
查看>>
方兴东:中国网站十年
查看>>
2010年微软和谷歌十大战场:从桌面到浏览器
查看>>
马云给阿里巴巴员工的公开信
查看>>