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

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访问数据,并为固件组件提供了一种机制来监控特定的设置,并在设置被更改时发出警报。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

什么是一致性哈希?一致性哈希是如何工作的?如何设计一致性哈希?

1.什么是一致性哈希?一致性哈希是如何工作的?如何设计一致性哈希?05-25 2.系统设计:从零用户扩展到百万用户05-28 收起 如果你有 n 个缓存服务器,一个常见的负载均衡方式是使用以下的哈希方法: 服务器索…

强连通分量-tarjan算法缩点

一. 什么是强连通分量? 强连通分量:在有向图G中,如果两个顶点u,v间(u->v)有一条从u到v的有向路径,同时还有一条从v到u的有向路径,则称两个顶点强连通(strongly connected)。如果有向图G的每…

NLP实战:调用Gensim库训练Word2Vec模型

目录 一、准备工作 1. 安装Gensim库 2. 对原始语料分词 二、训练Word2Vec模型 三、模型应用 1.计算词汇相似度 ​编辑 2. 找出不匹配的词汇 3. 计算词汇的词频 四、总结 🍨 本文为[🔗365天深度学习训练营]内部限免文章(版权归 *K同学…

Flask-RESTful的使用

Flask-RESTful的使用 Flask-RESTful基本使用安装定义资源Resources创建API实例添加资源到API运行Flask应用 请求处理请求解析参数校验 响应处理数据序列化定制返回格式 其他功能蓝图装饰器集合路由命名规范路由名称 Flask-RESTful Flask-RESTful是一个用于构建RESTful API的扩展…

C++类和对象 -- 知识点补充

补充 const成员函数static成员友元内部类匿名对象拷贝对象时的一些编译器优化 const成员函数 将const修饰的成员函数称为const成员函数,const修饰类成员函数,实际是修饰该成员函数隐含的this指针,表明在该成员函数中不能对类的成员进行修改。…

使用MockJS进行前端开发中的数据模拟

在前端开发中,有时我们需要在没有后端接口的情况下进行前端页面的开发和测试。这时,我们可以使用MockJS来模拟数据,以便进行开发和调试。MockJS是一个用于生成随机数据和拦截Ajax请求的JavaScript库,它能够帮助我们快速搭建起一个…

Linux---用户切换命令(su命令、sudo命令、exit命令)

1. su命令 root用户拥有最大的系统操作权限,而普通用户在许多地方的权限是受限的。 普通用户的权限,一般在其HOME目录内是不受限的。 一旦出了HOME目录,大多数地方,普通用户仅有只读和执行权限,无修改权限。 su 是…

【操作系统】01.操作系统概论

操作系统的发展历史 未配置操作系统 手工操作阶段 用户独占全机,人机速度矛盾导致系统资源利用率低 脱机输入输出方式 为了缓解主机cpu和IO设备之间速度不匹配的矛盾,出现了脱机IO技术 在外围机的控制下,通过输入设备,将数据输…

耗时1周整理了网络安全学习路线,非常详细!

前言 这一期就出一个怎么学习网络安全的学习路线和方法,觉得有用的话三连收藏下 首先咱们聊聊,学习网络安全方向通常会有哪些问题 1、打基础时间太长 学基础花费很长时间,光语言都有几门,有些人会倒在学习linux系统及命令的路上…

数论专题(3)逆元

目录 初步认识 逆元 定义 应用 费马小定理 好久没有更新我们的数论专题板块了,今天,我们就来探究一下新知——逆元。 初步认识 在数据非常大的情景下,我们通常会对数据先进行取模运算,来计算在一定的范围内进行处理。而运算…

Java 进阶 -- 集合(一)

本节描述Java集合框架。在这里,您将了解什么是集合,以及它们如何使您的工作更轻松,程序更好。您将了解组成Java Collections Framework的核心元素——接口、实现、聚合操作和算法。 介绍告诉您集合是什么,以及它们如何使您的工作…

day4,day5 -java集合框架

List、Set、Map等常用集合类的特点和用法。 常用集合类(List、Set、Map 等)是 Java 中提供的数据结构,用于存储和操作一组数据。以下是它们的特点和用法: List(列表): 特点:有序集合&#xff0…

《深入理解计算机系统(CSAPP)》第8章 异常控制流 - 学习笔记

写在前面的话:此系列文章为笔者学习CSAPP时的个人笔记,分享出来与大家学习交流,目录大体与《深入理解计算机系统》书本一致。因是初次预习时写的笔记,在复习回看时发现部分内容存在一些小问题,因时间紧张来不及再次整理…

Android 12系统源码_WindowInsets (一)WindowInsets相关类和功能介绍

一、什么是WindowInsets? WindowInsets源码解释为Window Content的一系列插值集合,可以理解为可以将其理解为不同的窗口装饰区域类型,比如一个Activity相对于手机屏幕需要空出的地方以腾给StatusBar、Ime、NavigationBar等系统窗口,具体表现为该区域需要的上下左右的宽高。…

如何强制删除文件夹?这样操作就能搞定!

案例:我想删掉一些没有用的文件夹,释放一些电脑内存,但是我发现,有些文件夹并不能直接被删除。怎样才能删除这些文件夹?有没有小伙伴有解决的办法。 在使用电脑过程中,我们可能会遇到一些无法正常删除文件夹…

操作系统-进程和线程-进程和线程

目录 一、进程的概念、组成、特征 二、进程的状态与转换、组织 2.1进程状态 2.2进程转换关系 2.3进程的组织 链接方式 索引方式 三、进程控制 3.1进程的创建 3.2进程的终止 3.3进程的阻塞和唤醒 3.4进程的切换 ​编辑 四、进程通信 4.1共享存储 4.2消息传递 直接通信…

[中间件漏洞]nginx漏洞复现

目录 文件解析漏洞 原理分析 复现过程 防御方法 目录遍历漏洞 原理分析 复现过程 防御方法 空字节代码执行漏洞 复现过程 防御方法 整数溢出漏洞(CVE-2017-7529) 复现过程 防御方法 文件名逻辑漏洞(CVE-2013-4547) 复现过程 防…

南京市某高校计算机科学与技术专业性能测试与Loadrunner—考试试卷分析

XXX科技学院试卷 20 /20 学年 第 学期 课程所属部门: 课程名称: 课程编号: 考试方式:(A、B、开、闭)卷 使用班级: …

Android 12.0仿ios的hotseat效果修改hotseat样式

1.概述 最近在12.0产品项目需求的需要,系统原生Launcher的布局样式很一般,所以需要重新设计ui对布局样式做调整,产品在看到 ios的hotseat效果觉得特别美观,所以要仿ios一样不需要横屏铺满的效果 居中显示就行了,所以就要看hotseat的具体布局显示了 效果图如下: 2.仿io…

Python数据攻略-Pandas常用数据操作

大家好,我是Mr数据杨。今天我将带领各位走进Python的奇妙世界,就像步入三国演义那样热闹且复杂的战争年代。这里,数据就像那些智勇双全的武将和策士,我们要学习如何访问和修改它们,就如同诸葛亮那样掌控战局。 先来理…