UEFI学习笔记(五):EDK II PCD的概念、类型、使用

UEFI学习笔记(五):EDK II PCD

  • 一、基本概念
    • 目的
  • 二、PCD类型
    • 1、FixedAtBuild
    • 2、FeatureFlag
    • 3、PatchableInModule
    • 4、Dynamic
    • 5、DynamicEx
    • 6、DynamicHii
    • 7、DynamicVpd
  • 三、PCD的使用
    • 1、在.DEC中声明
    • 2、在.INF中引用
    • 3、在.DSC中配置
    • 4、在.c中使用
  • 四、特殊的PCD
  • 参考文章

一、基本概念

在 UEFI中,PCD(Platform Configuration Database)是一种用于管理平台配置数据的机制。PCD 允许固件和操作系统在运行时读取和修改配置数据,以支持系统的定制和优化。

目的

为了把代码中可配置的信息抽象出来成PCD,使得Module和Platform容易做定制化,不用修改源码,容易维护,便于改动。三个方面:
1)不仅可以在Build-time中可以通过编译选项配置,
2)在Run-time(boot过程)中也可以配置,
3)在Binary中也可以进行配置

二、PCD类型

(对应的数据类型都是基本数据类型)

1、FixedAtBuild

作用域在一个模块中(模块级的)。用于控制Feature,在build之后不能修改(相当于一个宏)。不同模块可以配置不同的值。只支持静态设置。

2、FeatureFlag

和FixedAtBuild是一样的作用,但是是Boolean类型。(同1的作用)

3、PatchableInModule

作用域在一个模块中(模块级的),可以在Binary Level进行修改。

4、Dynamic

作用域在整个系统中(系统级的)。动态的(在整个启动过程中可以set、get)。PCD的值存在memory里面,下次启动时,上次更改的值丢失了,每次启动都是从default值开始。

5、DynamicEx

与DynamicEx类似。区别是:
如果platform是从源码build出来的,没有binary在里面的时候,PCD用的都是Dynamic这种类型;
如果在BIOS里面有一些模块是binary方式集成进来的而这些binary又需要用到PCD(用于Binary Release),那么这些Binary集成的要用到的PCD就必须要设置为DynamicEx类型。

6、DynamicHii

作用域在整个系统中(系统级的)。动态的(在整个启动过程中可以set、get)。PCD的值和EFI Variable关联在一起(可能是non-volatile的,下次作启动还起效)

7、DynamicVpd

作用域在整个系统中(系统级的)。动态的(在整个启动过程中可以set、get)。是存在VPD空间的(在FLASH上,只读),一般是出厂配置。

三、PCD的使用

1、在.DEC中声明

[PcdsFixedAtBuild]gEmulatorPkgTokenSpaceGuid.PcdEmuFlashNvStorageVariableBase|0x0|UINT64|0x00001014

PCD的唯一性是通过GuidName和TokenNum(0x00001014)决定。GuidName、TokenNum不能修改了,Value可以修改。

2、在.INF中引用

在Pcd section中列出来,示例如下:

[Pcd]gEfiMdeModulePkgTokenSpaceGuid.PcdConOutRow                          ## PRODUCESgEfiMdeModulePkgTokenSpaceGuid.PcdConOutColumn                       ## PRODUCESgEfiMdeModulePkgTokenSpaceGuid.PcdVideoHorizontalResolution          ## PRODUCES

3、在.DSC中配置

设置PCD的值,示例如下:

[PcdsFixedAtBuild]gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x0fgEfiMdePkgTokenSpaceGuid.PcdReportStatusCodePropertyMask|0x06gEfiMdeModulePkgTokenSpaceGuid.PcdMaxSizeNonPopulateCapsule|0x0

4、在.c中使用

通过PCB Library进行操作,最常用的是:PCDGetXX()PCDSetXX()
(其中:XX = 8/16/32/Size/Ptr/Boolean),示例如下:

PcdStatus = PcdSet16S(PcdPlatformBootTimeOut, GetFrontPageTimeoutFromQemu);
Timeout = PcdGet16(PcdPlatformBootTimeOut);

四、特殊的PCD

参考文章

UEFI——PCD介绍

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

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

相关文章

❤Node08-Express-jwt身份认证

❤Node08-Express-jwt身份认证 1、token基本概念​ Session认证的局限性​ Session 认证机制需要配合Cookie才能实现。由于 Cookie 默认不支持跨域访问,所以,当涉及到前端跨域请求后端接口的时候,需要做很多额外的配置,才能实现…

【JVM】JVM栈帧中的动态链接 与 Java的面向对象特性--多态

栈帧 每一次方法调用都会有一个对应的栈帧被压入栈(虚拟机栈)中,每一个方法调用结束后,都会有一个栈帧被弹出。 每个栈帧中包括:局部变量表、操作数栈、动态链接、方法返回地址。 JavaGuide:Java内存区域…

PostgreSQL的操作系统兼容性

PostgreSQL的操作系统兼容性 PostgreSQL 能运行在多种操作系统上,以下是一些主要支持的操作系统: Unix/Linux 系统 Linux:几乎所有的主流 Linux 发行版(如 Debian、Ubuntu、Red Hat、CentOS、SuSE 等)都支持 Postgr…

Debian项目实战——环境搭建篇

Debian系统安装 准备工作 1、系统镜像:根据自己的需要选择合适的版本格式:x86 / arm 架构 | 最好下载离线安装版本 | 清华镜像源 2、制作工具:balenaEtcher 3、系统媒介:16G以上U盘最佳 烧录镜像 打开balenaEtcher进行烧录&am…

11. 建立你的第一个Web3项目

11. 建立你的第一个Web3项目 在这一部分,我们将带你一步步地建立一个简单的Web3项目,从环境搭建到智能合约的创建与部署,再到开发一个去中心化应用(dApp)并与智能合约交互。这是你迈向Web3开发的第一步。 1. 环境搭建…

1.简述语言建模LM、统计语言建模SLM、神经语言模型NLM、预训练语言模型PLM、大语言模型LLM

语言是人类表达和交流的突出能力,它在儿童早期发展并在一生中不断演变。然而,机器除非配备了强大的人工智能算法,否则不能自然地掌握以人类语言形式理解和交流的能力。实现让机器像人类一样阅读、写作和交流的目标,一直是一个长期…

改变事件

窗口的某些属性的状态发生改变时就会触发该事件 对应的事件类型包括 QEvent::ToolBarChange, QEvent::ActivationChange, QEvent::EnabledChange, QEvent::FontChange,QEvent::StyleChange, QEvent::PaletteChange, QEvent::WindowTitleChange, QEvent::IconTextChange, QEve…

GO Govaluate

govaluate 是一个用于在 Go 语言中动态求值表达式的库。它允许你解析和评估字符串形式的表达式,这些表达式可以包含变量、函数以及逻辑、算术和比较操作。它非常适合在运行时处理复杂的逻辑规则和条件表达式,而不需要重新编译代码。 安装 govaluate go…

SpringMVC中使用REST风格

了解REST REST:即 Representational State Transfer。(资源)表现层状态转化。是目前最流行的一种互联网软件架构。使用这种架构的应用即为RESTFUL。它结构清晰、符合标准、易于理解、扩展方便, 所以正得到越来越多网站的采用。 …

【练习9】大数加法

链接:大数加法__牛客网 (nowcoder.com) 分析: 当作竖式计算 import java.util.*;public class Solution {public String solve (String s, String t) {StringBuffer ret new StringBuffer();//i是字符串s的最后一个字符的索引int i s.length() - 1;//j…

新能源汽车安全问题如何解决?细看“保护罩”连接器的守护使命

「当前市场上绝大部分电池的安全系数远远不够」。 在一场世界动力电池大会上,宁德时代的董事长曾毓群这样犀利直言。 从汽车开始向电动化转型升级那天起,动力电池的安全隐患就一直是个老生常谈的话题了。曾毓群的这句话,直接点明了行业的发展…

参数传了报错没传参数识别不到参数传丢

【记一次参数传值了但报错未传值的问题解决历程】 问题描述:同一个接口,用测试类调可以成功,用postman调用一直报错少参数,后又尝试了用idea自带的http调用,同样报错参数未传值。 如图,传值了报错未传值。…

Java并发:互斥锁,读写锁,Condition,StampedLock

3,Lock与Condition 3.1,互斥锁 3.1.1,可重入锁 锁的可重入性(Reentrant Locking)是指在同一个线程中,已经获取锁的线程可以再次获取该锁而不会导致死锁。这种特性允许线程在持有锁的情况下,可…

AI网盘搜索 1.2.6 智能文件搜索助手,一键搜索所有资源

对于经常需要处理大量文件的人来说,AI网盘检索简直是救星。它提供了智能对话式搜索功能,只需用自然语言描述就能找到需要的文件。此外,它还广泛支持各种文件类型,从文档到图片,全面覆盖。精准定位功能让您能够快速找到…

DSC+主备+异步备库搭建

DSC主备异步备库搭建 本次在DSC的基础上进行主备集群异步备库的搭建,实现DSC主备异步备库的集合。 这里DMDSC集群是看做一个数据库服务(即DSC集群内的都叫主库),备库是一个单机实例 环境配置 服务器配置 端口配置 实例名PORT…

C#获取计算机信息

目录 效果 项目 代码 下载 效果 项目 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Management; n…

Vulnhub:bassamCTF

靶机下载地址 信息收集 主机发现 扫描攻击机同网段存活主机。 nmap 192.168.31.0/24 -Pn -T4 靶机ip:192.168.31.165 端口扫描 nmap 192.168.31.165 -A -p- -T4 开放端口22,80。 网站信息收集 访问80端口的http服务。首页是空白页面,…

关于打不开SOAMANAGER如何解决

参考文章:https://blog.csdn.net/yannickdann/article/details/115396035 打开SE93

15_分布式数据结构

菜鸟: 老鸟,我最近在处理大量数据的时候遇到了瓶颈,单台服务器的内存和计算能力都不够用了。你知道有什么方法可以解决这个问题吗? 老鸟: 嗯,这种情况很常见。你可以考虑使用分布式数据结构。听说过吗&a…

ARM base instruction -- blr

BLR Branch with Link to Register calls a subroutine at an address in a register, setting register X30 to PC4. 带寄存器链接的分支在寄存器中的某个地址调用一个子程序&#xff0c;将寄存器 X30 (lr) 设置为 PC4。 BLR <Xn> BLR 跳转到reg内容地址&#xff0c;…