当前位置: 首页 > 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评估的概念、过…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...