【UEFI】BIOS 阶段全局变量类型

news2024/12/25 9:06:18

BIOS的几个阶段需要不同阶段的数据传递,下面介绍4个全局变量。
在这里插入图片描述

1 固件存储介绍

  本规范描述了应该如何在非易失性存储器中存储和访问文件。固件实现必须支持标准的PI固件卷和固件文件系统格式(下文所述),但可能支持其他存储格式。

1.2 固件设备

  固件设备是一个包含固件代码和/或数据的持久性物理存储库。它通常是一个闪存组件,但也可能是一些其他类型的持久性存储。单个物理固件设备可以被划分为较小的部分,以形成多个逻辑固件设备。类似地,多个物理固件设备可以聚合成一个更大的逻辑固件设备。

  本节将介绍一些典型的物理固件设备的特性。

1.2.1 Flash (闪存)

   Flash设备是固件卷中最常见的非易失性存储库。闪存设备通常被划分为可能具有不同大小的扇区(或块),每个扇区都具有不同的运行时特性。Flash设备有几个独特的品质,这反映在固件文件系统的设计中:

  • 闪存设备可以按部门进行删除。擦除后,扇区内的所有位都返回到其擦除值,全部0或全部1。
  • 如果从擦除值更改为非擦除值,则可以逐位写入闪存设备。例如,如果擦除值为1,则可以将值为1的位更改为0。
  • 闪存设备只能通过对整个闪存扇区执行擦除操作,从非擦除值更为擦除值。
  • 一些闪存设备可以启用或禁用对整个闪存设备或单个闪存扇区的读取和写入。
  • 一些闪存设备可以锁定当前的启用或禁用读写状态,直到下一次重置。
  • Flash写和擦除通常比读取更长。
  • Flash设备经常对在发生写入或擦除时可以执行的操作进行限制。

1.3 Firmware Volumes

   固件卷(FV)是一种逻辑固件设备.在本规范中,数据和/或代码的基本存储存储库是固件卷。每个固件卷都被组织到一个文件系统中。因此,该文件是固件的基本存储单元。
每个固件卷都具有以下属性:

  • Name.每个卷都有一个由UEFI全局唯一标识符(GUID)组成的名称。
  • Size.每个卷都有一个大小,它描述了所有卷数据的总大小,包括任何标头、文件和可用空间。
  • Format.每个卷都有一种格式,它描述了在卷的主体中使用的固件文件系统。
  • 内存映射?某些卷可能是通过内存映射进行的,这表明该卷的整个内容会立即出现在处理器的内存地址空间中
  • 粘性写? 某些卷可能需要特殊的擦除周期,才能将位从非擦除值更改为擦除值。
  • 擦除极性. 如果卷支持“粘写”,则卷内的所有位将在擦除循环后返回到此值(0或1)。

2、HOB设计

   HOB生成阶段是创建HOB和HOB列表的预启动阶段,HOB消费阶段是将HOB列表传递并消耗到的预引导阶段。如果PI体系结构实现包含了PEI和DXE,那么HOB生产者阶段是PEI阶段,而HOB消费阶段是DXE阶段。然而,生产者和消费者可以根据实施方式的不同而改变。
   下表将本规范中使用的术语与其他PI规范中使用的术语进行了转换。

HOB规范中使用的术语在其他PI规范中使用的术语
HOB生产阶段PEI phase
HOB consumer phaseDXE phase
HOB Services:创建被称为移交块(HOBs)的数据结构,用于将信息传递到PI体系结构的下一个阶段。
在HOB制作阶段中的可执行内容Pre-EFI Initialization Module (PEIM)
移交到HOB消费阶段DXE初始程序加载(IPL)PEIM或DXE IPL PEIM-to-PEIM接口(PPI)
平台启动策略阶段BDS phase。

2.1 构建HOB列表

   HOB列表最初是由HOB生产者阶段构建的。HOB列表是在存在、初始化和测试的内存中创建的。一旦创建了初始的HOB列表,物理内存就不能被后续的软件代理重新映射、交错或以其他方式移动。
   HOB生产者阶段在公开HOB列表之前,必须在初始HOB列表中构建以下三个HOB:

  • The PHIT HOB
  • 内存分配HOB,描述用于永久内存的引导带处理器(BSP)堆栈所在的位置
    或 内存分配HOB,描述永久存储的BSP存储位置(仅安腾处理器系列)
  • 一种资源描述符HOB,它描述了包含HOB生产者阶段内存范围的物理内存范围,其属性设置为当前、初始化和测试。
       HOB列表的创建者可能会在最初的HOB列表中构建更多的HOB,例如额外的HOB来描述其他物理内存范围。还可以有其他模块,其中可能包括一个特定于HOB生成器阶段的HOB,用于记录在初始化过程中发现的内存错误。
       当HOB生成者阶段完成其列表创建时,它将一个指向PHIT HOB的指针公开到其他模块。

2.2 HOB 构建规则

   HOB构建必须遵守以下规则:

  1. 所有的HOB都必须以一个HOB通用标头开始。这个要求允许用户定位他们感兴趣的hob,同时跳过其他部分。请参见EFI_HOB_GENERIC_HEADER的定义。
  2. HOB可能包含仅在HOB生产者阶段和消费阶段期间可用的、直到HOB消费阶段终止的引导服务数据。
  3. HOB可以通过HOB消费阶段重新定位到系统内存中。HOB不能包含指向HOB列表中其他数据的指针,包括其他HOB列表中的指针。该表必须能够被复制,而不需要内部指针调整。
  4. 所有HOB的长度必须是8个字节的倍数。此要求满足安腾®处理器系列的对齐限制
  5. PHIT HOB必须始终以8字节的边界开始。由于这个需求和这个列表中的需求#4,所有的hob都将在一个8字节的边界上开始。
  6. HOBs被添加到HOB列表的末尾。HOB只能在HOB生产者阶段添加到HOB列表中,而不能添加到HOB消费阶段。
  7. 不能删除HOB。每个HOB的通用HOB标头必须描述HOB的长度,这样才能找到下一个HOB。

3.Report Status Code Routers

   本节提供了在报告状态代码路由器中使用的PPI和协议的代码定义。这些接口允许多个平台依赖的驱动程序显示状态代码信息,在彼此不知情的情况下共存。
在这里插入图片描述
   在每个阶段中都有一个通用的状态代码驱动程序。在每种情况下,驱动程序都会使用报表状态代码协议,并生成 Report Status Code Handler PPI或Protocol。Report Status Code Handler PPI或Protocol的每个消费者都将注册一个回调,以接收来自通用状态代码驱动程序的新状态代码的通知。

3.1 代码定义

3.1.1 Report Status Code Handler Protocol

typedef struct {
  EFI_RSC_HANDLER_REGISTER Register;
  EFI_RSC_HANDLER_UNREGISTER Unregister;
} EFI_RSC_HANDLER_PROTOCOL;

Register: 注册有关状态代码消息的通知的回调。
Unregister: 取消注册回调。
描述:一旦注册,状态代码消息将被转发到回调。该回调在被释放之前必须未注册。
回调函数:

typedef
EFI_STATUS
(EFIAPI *EFI_RSC_HANDLER_CALLBACK) (
 IN EFI_STATUS_CODE_TYPE CodeType,
 IN EFI_STATUS_CODE_VALUE Value,
 IN UINT32 Instance,
 IN EFI_GUID * CallerId,
 IN EFI_STATUS_CODE_DATA * Data
 );

描述:提供一个软件模块可以调用来报告状态代码的接口。
参数:
Type:指示正在报告的状态代码的类型
Value:描述一个硬件或软件实体的当前状态,他包含了关于用于分类实体以及操作的类和子类的信息。
Instance:对系统内的硬件或软件实体的枚举,系统可能包含多个匹配类/子类配对的多个实体。这个实例区分了它们。
CallerId:此可选参数可用于标识调用者。此参数允许状态代码驱动程序对不同的调用者应用不同的规则
Data:此可选参数可用于传递其他数据
包括驱动程序在内的各种软件模块都可以调用这个函数来报告一个状态代码,不保证如何处置状态码。ReportStatusCode()函数可以选择记录状态代码,但不需要执行此操作。

4. PCD

一种包含驱动程序或应用程序可以访问的各种当前平台设置或指令的平台数据库。

typedef struct _EFI_PCD_PROTOCOL {
 EFI_PCD_PROTOCOL_SET_SKU SetSku;
 EFI_PCD_PROTOCOL_GET_8 Get8;
 EFI_PCD_PROTOCOL_GET_16 Get16;
 EFI_PCD_PROTOCOL_GET_32 Get32;
 EFI_PCD_PROTOCOL_GET_64 Get64;
 EFI_PCD_PROTOCOL_GET_POINTER GetPtr;
 EFI_PCD_PROTOCOL_GET_BOOLEAN GetBool;
 EFI_PCD_PROTOCOL_GET_SIZE GetSize;
 EFI_PCD_PROTOCOL_SET_8 Set8;
 EFI_PCD_PROTOCOL_SET_16 Set16;
 EFI_PCD_PROTOCOL_SET_32 Set32;
 EFI_PCD_PROTOCOL_SET_64 Set64;
 EFI_PCD_PROTOCOL_SET_POINTER SetPtr;
 EFI_PCD_PROTOCOL_SET_BOOLEAN SetBool;
 EFI_PCD_PROTOCOL_CALLBACK_ON_SET CallbackOnSet;
 EFI_PCD_PROTOCOL_CANCEL_CALLBACK CancelCallback;
 EFI_PCD_PROTOCOL_GET_NEXT_TOKEN GetNextToken;
 EFI_PCD_PROTOCOL_GET_NEXT_TOKEN_SPACE GetNextTokenSpace;
} EFI_PCD_PROTOCOL;

对此协议的调用者必须处于TPL_APPLICATION任务优先级级别。
这是一个基本的PCD服务API,它为访问平台中的配置内容提供了一个抽象。它是一种提取信息的无缝机制,而不管信息存储在哪里(如只读数据,或EFI变量)。
该协议允许通过大小粒度的api访问数据,并为固件组件提供了一种机制来监控特定的设置,并在设置被更改时发出警报。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/615115.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【网页布局形式----浮动】

网页布局形式----浮动 css浮动:一、常见的三种网页布局形式:1.1 网页布局两大准则: 二 、浮动:2.1 浮动语法:2.2 浮动特性(重难点):浮动元素通常与标准流的父级元素搭配使用&#xf…

Linux进程虚拟地址空间

文章目录 1. 进程地址空间1.1 存在1.2 初步了解1.2 虚拟地址空间的划分1.3 页表 2. 虚拟地址如何转化成物理地址2.1 二级页表2.2 总结 3. 写时拷贝3.1 原理3.2 解释为什么 pid_t ret fork() 中,ret 会有两个不同的值 4. 为何需要虚拟地址空间 1. 进程地址空间 1.1…

基于python的企业资产管理系统vue+django+flask

开发语言:Python 框架:django/flask Python版本:python3.7.7 数据库:mysql 数据库工具:Navicat 开发软件:PyCharm 文章介绍了企业资产管理系统的系统分析部分,包括可行性分析等,系…

基于SpringBoot的CRM客户管理销售团队管理系统(含源码+数据库)

1)环境准备 JDK 1.8 以上 MySql 5.7 以上 Tomcat 7.0 以上 maven 3.5.0 Idea 2)建立PowerTeam数据库 打开Mysql管理工具(推荐使用Navicat Premium) 执行db.sql脚本 可选操作执行demo_data.sql演示数据脚本 3)将项目导入Idea开发工具中 ​4)修…

UE5使用Advanced-VR-Framework开发VR介绍

插件地址:https://www.unrealengine.com/marketplace/zh-CN/product/advanced-vr-framework 一、UE5开发VR的优势: UE5在三维的表现力上非常优秀;有基于Twinmotion等三维工具支持,制作流程上比较顺畅;UE5场景素材也非…

W13电力线载波通信技术

CK_Label_W13 CK_Label_W13(外接供电版) 产品型号 CK_Label_W13 尺寸 70*34.7*13.6mm 屏幕尺寸 2.1 inch 分辨率 250*122 像素密度 130dpi 显示技术 电子墨水屏显示 显示颜色 黑/白 外观颜色 白色 按键 1 指示灯 1 RGB灯 灯光颜…

Vue.js 中的混入是什么?如何使用混入?

Vue.js 中的混入是什么?如何使用混入? 在 Vue.js 中,混入(Mixin)是一种可复用的对象,可以包含任意组件选项。通过混入,我们可以将一些相同的代码逻辑抽离出来,使组件更加简洁和可维…

录音如何转换成mp3格式

录音怎如何转换成mp3格式?因为我们知道录音的格式有很多种,其中常见的有WAV格式(Waveform Audio File Format):是一种无损音频文件格式,音质高保真,通常用于专业录音和音乐制作。WMA格式&#x…

qt三个窗口基本类

qt是一个gui框架,做图形用户界面的,本地可以跑,跟一些web框架那种做好点击网址跳转的不一样,python的web常用的flask和django,python也有gui框架比如pytqt和tkinter,这个专栏讲qt5,用c写gui qt…

WOWWEE ROVIO小车改造思路

23年5月接触到这个车,大约是07年的玩具,初看到外观,真的是惊艳,三爪着地,长长的脖子,有些科幻电影中外星生物的味道。这个ID设计,放到今天,也是能镇住国内一众玩具厂商的。惊讶之余&…

浅谈 ByteHouse Projection 优化实践

预聚合是 OLAP 系统中常用的一种优化手段,在通过在加载数据时就进行部分聚合计算,生成聚合后的中间表或视图,从而在查询时直接使用这些预先计算好的聚合结果,提高查询性能,实现这种预聚合方法大多都使用物化视图来实现…

基于javaweb jsp+SSM 简易版教务管理系统的设计与实现

目录 一.项目介绍 二.环境需要 三.技术栈 四.使用说明 五. 运行截图 六. 视频演示 一.项目介绍 本系统分为管理员、老师、学生三类 管理员:维护课程信息、维护老师信息、维护学生信息、密码重置(其他账户)、修改密码、退出系统 老…

macOS Sonoma 14.0 Beta 1 (23A5257q) ISO、IPSW、PKG 下载

macOS Sonoma 14.0 Beta 1 (23A5257q) ISO、IPSW、PKG 下载 本站下载的 macOS 软件包,既可以拖拽到 Applications(应用程序)下直接安装,也可以制作启动 U 盘安装,或者在虚拟机中启动安装。另外也支持在 Windows 和 Li…

JVM暂时私有

Jvm: 一、类加载器分类 引导类加载器:BootStrapClassLoader(出于安全考虑,Bootstrap启动类加载器只加载包名为java、javax、sun等开头的类)自定义类加载器:Extension ClassLoader AppClassLoader (Tomcat也…

DBeaver 23.0.5发布

导读SQL 编辑器是一款功能强大的数据库管理工具,为用户提供了便捷的 SQL 编写和编辑功能。最近,该编辑器进行了多项更新,提升了使用体验。 首先,WHERE 和 SELECT 等自动完成功能现在显示与别名表的别名。用户可以使用键盘快捷键或…

https通信加密原理

为什么要用https HTTP 由于是超文本传输协议,是一个简单的请求-响应协议,它通常运行在TCP之上,它是明文传输,不能保证数据的完整性,不能保证是否被窃听,不能保证数据是否被篡改 https采用了一些加解密&am…

安装银河麒麟操作系统

文章目录 一、安装银河麒麟操作系统1.1、简介1.2、银河麒麟高级服务器操作系统V101.3、下载银河麒麟镜像1.4、安装银河麒麟操作系统兼容版 一、安装银河麒麟操作系统 1.1、简介 银河麒麟(KylinOS)原是在863计划和国家核高基科技重大专项支持下&#xf…

HFish蜜罐部署教程(windows版)—HW蓝队主动防御利器

文章目录 前言基础环境蜜罐部署管理端部署添加节点&开启服务 攻击展示端口扫描测试目录扫描测试POC测试 && ssh测试失陷测试 酷炫大屏后记Tips 前言 一年一度的HW马上又要来了,【不过听说今年推迟了一些】 ,各位师傅应该都按耐不住了&#…

Tcl-12. 数组

TCL支持通过数组的形式存储多个元素。 Tcl中的数组和其他高级语言的数组有些不同:Tcl 数组元素的索引,或称键值,可以是任意的字符串,而且其本身没有所谓多维数组的概念。数组的存取速度要比列表有优势,数组在内部使用散…

从理论上理解SQL注入、XSS、中间件解析漏洞、挖矿马

目录 1、SQL注入 (1)原理 (2)分类 (3)防御 2、XSS (1)原理 (2)分类 3、中间件(解析漏洞) (1)IIS6.X …