当前位置: 首页 > news >正文

UEFI——PEI阶段

一、PEI介绍

Pre-EFI Initialization(PEI)在引导的早期被调用,仅利用CPU资源调用PEIM,这些PEIM负责:

(1)初始化一些永久内存

(2)在HOBs中描述内存信息

(3)将控制权传递给驱动执行环境(DXE)阶段

(4)此外,PEI阶段还负责危机恢复和从S3苏醒。

PEI提供了一个公共框架,通过这个框架可以独立的设计、开发、更新初始化模块。开发PEI模块是为了满足PI框架中的以下模块:

(1)维护信任链,防止未经授权更新PEI阶段或PEIM

(2)提供一个PEI核心,这个核心对于其它处理器厂商或多或少的保持不变,但它将支持来不同供应商的外接模块,特别是处理器、芯片组、RAM初始化等

(3)允许独立开发早期初始化模块

PEI的支持的功能限于:

(1)定位、验证和调度PEIMs

(2)促进PEIMs之间的通信

(3)为后续阶段提供交接数据

PEI foundation会建立一个名为PEI Services Table的系统表,这张表对所有的PEIM是可见的。由于PEI foundation和临时RAM在构建的时候是未知的,因此指向PEI Services Table的指针被传递给每一个PEIM和PEIM to PEIM(PPI)的一部分。PEI foundation提供的服务有:

二、PEI阶段名词解释 

PEI Foundation :是负责派遣PEIMs、维护引导模式、初始化永久内存、调用DXE加载的实体。

PEI Dispatcher:PEI派遣器的实质是PEI Foundation中实现的状态机,PEI dispatcher会评估固件卷中的PEIM的依赖表达式是PPIs的逻辑组合,描述了在调用给定的PEIM必须能够用的PPI,PEI派遣器会参考IEI Foundation中的PPI数据库决定安装哪些PPI,如果PPI已经安装,依赖表达式将求值为true,这代表告诉PEI派遣器可以运行PEIM。

PEIM:PEIM用于实现个性化的PEI Foundation,PEI Foundation代码的作用是按顺序调度PEIM,以实现基本服务。

PPI:PEIM之间使用一种名为PPI的数据结构进行通信

三、PEI Services Table

PEI Services Table中包含了一系列的函数指针,这个表位于临时内存或永久内存中,这取决于是处于PEI阶段的哪个时期。

typedef struct _EFI_PEI_SERVICES EFI_PEI_SERVICES;

 EFI_PEI_SERVICES所提供的服务可以分为:(1)管理启动模式(2)分配早期和永久内存(3)支持固件文件系统 (4)创建交接块HOBs

struct _EFI_PEI_SERVICES {////// The table header for the PEI Services Table.///EFI_TABLE_HEADER                  Hdr;//// PPI Functions//EFI_PEI_INSTALL_PPI               InstallPpi;EFI_PEI_REINSTALL_PPI             ReInstallPpi;EFI_PEI_LOCATE_PPI                LocatePpi;EFI_PEI_NOTIFY_PPI                NotifyPpi;//// Boot Mode Functions//EFI_PEI_GET_BOOT_MODE             GetBootMode;EFI_PEI_SET_BOOT_MODE             SetBootMode;//// HOB Functions//EFI_PEI_GET_HOB_LIST              GetHobList;EFI_PEI_CREATE_HOB                CreateHob;//// Firmware Volume Functions//EFI_PEI_FFS_FIND_NEXT_VOLUME2     FfsFindNextVolume;EFI_PEI_FFS_FIND_NEXT_FILE2       FfsFindNextFile;EFI_PEI_FFS_FIND_SECTION_DATA2    FfsFindSectionData;//// PEI Memory Functions//EFI_PEI_INSTALL_PEI_MEMORY        InstallPeiMemory;EFI_PEI_ALLOCATE_PAGES            AllocatePages;EFI_PEI_ALLOCATE_POOL             AllocatePool;EFI_PEI_COPY_MEM                  CopyMem;EFI_PEI_SET_MEM                   SetMem;//// Status Code//EFI_PEI_REPORT_STATUS_CODE        ReportStatusCode;//// Reset//EFI_PEI_RESET_SYSTEM              ResetSystem;//// (the following interfaces are installed by publishing PEIM)// I/O Abstractions//EFI_PEI_CPU_IO_PPI                *CpuIo;EFI_PEI_PCI_CFG2_PPI              *PciCfg;//// Future Installed Services//EFI_PEI_FFS_FIND_BY_NAME          FfsFindFileByName;EFI_PEI_FFS_GET_FILE_INFO         FfsGetFileInfo;EFI_PEI_FFS_GET_VOLUME_INFO       FfsGetVolumeInfo;EFI_PEI_REGISTER_FOR_SHADOW       RegisterForShadow;EFI_PEI_FFS_FIND_SECTION_DATA3    FindSectionData3;EFI_PEI_FFS_GET_FILE_INFO2        FfsGetFileInfo2;EFI_PEI_RESET2_SYSTEM             ResetSystem2;EFI_PEI_FREE_PAGES                FreePages;
};

四、PEI Foundation

PEI Foundation Entry Point:SEC阶段使用以下信息调用进入PEI Foundation的入口点:

        PPI、BFV大小和位置、临时RAM的大小和位置、可供PEI foundation使用的临时RAM的大小和位置、堆栈的大小和位置、关键引导FV的大小和位置

PEI foundation的入口点函数原型为:

typedef
VOID
(EFIAPI *EFI_PEI_CORE_ENTRY_POINT)(IN CONST  EFI_SEC_PEI_HAND_OFF    *SecCoreData, //指向PEI foundation的操作环境IN CONST  EFI_PEI_PPI_DESCRIPTOR  *PpiList //指向PEI core最初安装的一个或多个PPi列表);

其中,SecCoreData是一个数据结构,包含了 PEI core的操作环境,例如临时RAM的大小和位置、堆栈、BFV位置(UEFI的PEI阶段使用的栈是预先定义的,并且位于固件内部或某个已知的位置)。其原型为:

typedef struct _EFI_SEC_PEI_HAND_OFF {UINT16    DataSize; //数据结构的大小VOID      *BootFirmwareVolumeBase; //指向bfv第一个字节UINTN     BootFirmwareVolumeSize; //bfv的大小,以字节为单位VOID      *TemporaryRamBase; //指向临时RAMUINTN     TemporaryRamSize; //临时RAM的大小VOID     *PeiTemporaryRamBase; //指向PEI foundation可用的临时RAM的第一个字节UINTN    PeiTemporaryRamSize; //PEI foundation可用的临时RAM的大小VOID     *StackBase; //指向堆栈UINTN    StackSize; //堆栈的大小
} EFI_SEC_PEI_HAND_OFF;

PpiList指向由PEI核心最初安装的一个或多个PPI描述符的列表。一个空的PPI列表由一个带有结束标记EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST的描述符组成。作为其初始化阶段的一部分,PEI基础将添加这些由SEC托管的PPI到其PPI数据库中,以便PEI基础和任何模块都可以利用这些早期PPI中的相关服务调用和/或代码。其代码原型为:

typedef struct {UINTN       Flags;EFI_GUID    *Guid;VOID        *Ppi;
} EFI_PEI_PPI_DESCRIPTOR;


 

相关文章:

UEFI——PEI阶段

一、PEI介绍 Pre-EFI Initialization(PEI)在引导的早期被调用,仅利用CPU资源调用PEIM,这些PEIM负责: (1)初始化一些永久内存 (2)在HOBs中描述内存信息 (3…...

Nacos下载和启动

Nacos是什么? 一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台 下载 https://github.com/alibaba/nacos/releases/tag/2.1.1启动 将下载好的Nacos解压缩,然后到bin目录下打开cmd 输入指令:startup.cmd -m standalone 出…...

怎么选择适合的服务器

大家都知道,不管是公司还是个人,在数字化浪潮已经席卷全球的环境下,大家对服务器的需求是日渐增长的。很多人在买服务器的时候,多少都有点选择困难,今天我们就来对比下物理服务器和弹性云服务器,看看选哪个…...

通义千问大模型Java调用,百炼

文章目录 一、大模型服务平台[百炼](https://help.aliyun.com/zh/model-studio/getting-started)二、Java sdk调用与eventStream三、百炼平台其它 一、大模型服务平台百炼 百炼是阿里新出的一个大模型服务平台,聚合了多个千问大模型及其它一些大模型的调用&#xf…...

新发现!一键管理所有远程会话的神器——1Remote

大家好,今天给大家介绍一款非常实用的工具——1Remote,这是一款现代化的个人远程会话管理器与启动器,让您的远程工作变得更加轻松高效! 项目介绍 🚀 核心功能概览 多协议支持:1Remote支持RDP、SSH、VNC、…...

华为 HCIP 认证费用和报名资格

在当今竞争激烈的信息技术领域,华为 HCIP认证备受关注。它不仅能提升个人的技术实力与职业竞争力,也为企业选拔优秀人才提供了重要依据。以下将详细介绍华为 HCIP 认证的费用和报名资格。 一、HCIP 认证费用 华为HCIP认证的费用主要由考试费和培训费构成…...

Linux下载压缩包:tar.gz、zip、tar.bz2格式全攻略

在 Linux 中,下载各种格式的压缩包(如 .tar.gz、.zip、.tar.bz2 等)通常使用命令行工具如 wget 和 curl。 1. 使用 wget 下载压缩包 wget 是 Linux 中最常用的文件下载工具,支持 HTTP、HTTPS、FTP 等协议,可以直接从…...

运行PaddleOCR报错:requests.exceptions.SSLError: HTTPSconnectionPool……

文章目录 问题描述解决方法 问题描述 在运行以下代码时报错: ocr PaddleOCR(lang"en")解决方法 打开cmd,输入以下命令,查找Python解释器所在路径。 找到 Lib\site-packages\paddleocr\ppocr\utils\network.py,将代码…...

基于STM32L431小熊派设计的智能花盆(微信小程序+腾讯云IOT)(223)

文章目录 一、前言1.1 项目介绍【1】项目背景【2】设计实现的功能【3】项目硬件模块组成1.2 设计思路【1】整体设计思路【2】ESP8266工作模式配置1.3 项目开发背景【1】选题的意义【2】可行性分析【3】参考文献1.4 开发工具的选择【1】设备端开发【2】上位机开发1.5 系统框架图…...

CentOS 入门必备基础知识

CentOS(Community ENTerprise Operating System)是一个基于Red Hat Enterprise Linux(RHEL)的免费开源操作系统,广泛用于服务器环境。它以其稳定性、安全性和社区支持而闻名,对于初学者来说掌握一些基础知识…...

快速排序

一:基本思想 任取待排序元素序列中的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右 子序列中所有元素均大于基准值,然后最左右子序列重复该过程,直到所有元…...

钢琴灯有必要买很贵的吗?五款值得入手的护眼灯分享

钢琴灯有必要买很贵的吗?首先在这里先回答一下众多家长们提出问题,护眼灯钢琴灯并不是越贵越好!护眼灯钢琴灯这种比较大的电器虽然在生产中的用材用料存在一定的成本,但是并不是价格越贵的会越好,价格并不是决定产品质…...

C和指针:指针

内存和地址 程序视角看内存是一个大的字节数组,每个字节包含8个位,可以存储无符号值0至255,或有符号值-128至127。 多个字节可以合成一个字,许多机器以字为单位存储整数,每个字一般由2个或4个字节组成。 由于它们包含了更多的位&…...

paddle 分类网络

1.PaddlePaddlle强化学习及PARL框架 参考1 参考2 CPU版本安装 2.1 2.x版本安装 首先在anaconda下创建虚拟环境:可参考【1】Anaconda安装超简洁教程,瞬间学会! 飞桨安装链接【开始使用_飞桨-源于产业实践的开源深度学习平台】 2 安装 con…...

计算机网络408考研 2022

https://zhuanlan.zhihu.com/p/695446866 1 1 1SDN代表软件定义网络。它是一种网络架构,旨在通过将网络控制平面从数据转发平面分离出来,从而实现网络的灵活性和可编程性。在SDN中,网络管理员可以通过集中式控制器 来动态管理网络流量&…...

2023级JavaScript与jQuery

第三课:JavaScript对象编程 一.预习笔记 1.Date对象 对象创建:var myDatenew Date() 输出显示当前日期的标准时间 对象创建:var myDatenew Date(“2024/09/14”) 对象创建:var myDatenew Date(2024,9,14) 当前对象创建时&…...

【C++】————IO流

作者主页: 作​​​​​​者主页 本篇博客专栏:C 创作时间 :2024年9月9日 一、C语言的输入和输出 C语言中我们用到的最频繁的输入输出方式就是 scanf() 和 printf()。 scanf():从标准输入设备(键盘)读…...

ESP8266连接到Blinker平台

ESP8266是一款常见的物联网开发板,因其支持WIFI且性能强大,收到了各类电子爱好者的喜爱,Blinker是一个非常适合初学者的物联网开发平台,借助Arduino开发环境,二者之间进行巧妙配合,很容易便可以完成物联网的…...

qwen2 VL 多模态图文模型;图像、视频使用案例

参考: https://huggingface.co/Qwen/Qwen2-VL-2B-Instruct 模型: export HF_ENDPOINThttps://hf-mirror.comhuggingface-cli download --resume-download --local-dir-use-symlinks False Qwen/Qwen2-VL-2B-Instruct --local-dir qwen2-vl安装&#x…...

ASPICE评估:汽车软件质量的守护神

随着汽车行业的快速发展,车载软件系统的复杂性和重要性日益凸显。为了确保汽车软件的质量和安全性, 汽车行业引入了ASPICE(Automotive SPICE)评估作为评价软件开发团队研发能力的重要工具。 本文将详细介绍ASPICE评估的概念、过…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

Android15默认授权浮窗权限

我们经常有那种需求&#xff0c;客户需要定制的apk集成在ROM中&#xff0c;并且默认授予其【显示在其他应用的上层】权限&#xff0c;也就是我们常说的浮窗权限&#xff0c;那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

Golang——6、指针和结构体

指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...

FFmpeg:Windows系统小白安装及其使用

一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】&#xff0c;注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录&#xff08;即exe所在文件夹&#xff09;加入系统变量…...

基于Java+VUE+MariaDB实现(Web)仿小米商城

仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意&#xff1a;运行前…...