• UEFI PCD分析


    背景

    在实际开发中我们通常对于代码是否优秀有一个代码可配置性有要求,在kernel中我们使用 dts 来配置,在android中有property,那么对于 UEFI ,它的可配置性体现在PCD上面,加入我们同一套UEFI代码应用于PC和Mobile,他们的memory layout是不同的,那么我们通过在不同项目的 dsc 中对memory base, memorysize, Peripheral address base, peripheral address size 作动态配置,这样同一套代码也是可以应用不同平台的。

    PCD 变量定义

    PCD 的全称是 Platform Configuration Database, 也就是全局可配置数据库。

    通常一个 PCD 的定义如下:

    TokenSpaceGuidCName.PcdCName

    其中:

    TokenSpaceGuidCName: 是GUID,通常定义在 dec 文件中

    PcdCName: 是 PcdName, 通常定义在 dsc/dsc.inc 中

    NOTE:PCD 变量在 Sec, Dxe 的早期因为环境没有准备好,可能是无法使用的,需要注意使用周期问题。

    PCD 变量类型

    PCD 变量有几种类型:

    类型

    描述

    PcdsFeatureFlag

    条件判断的Pcd,通常用于宏控或者状态判断

    PcdsPatchableInModule

    在编译阶段赋值,但是可以在编译生成的二进制文件中更改对应变量

    PcdsFixedAtBuild

    在编译过程中赋值,在整个UEFI运行周期内不可改变

    PcdsDynamicDefault

    动态的 Pcd 信息,可以在运行过程中通过 PcdGetXXX, PcdSetXXX 来更改

    PcdsDynamicExDefault

    跟Dynamic PCD类似,算是加强版,使用宏PcdGetExXXX/PcdSetExXXX来访问变量;

    PCD变量使用

    典型定义

    Pcds 的赋值方式

    1. # 将 DefaultValue 赋值给 PcdCName
    2. TokenSpaceGuidCName.PcdCName | DefaultValue
    3. #各个段意义: PcdName, 默认值, 数据类型,pcd 全局唯一的 token
    4. TokenSpaceGuidCname.PcdCname|DefaultValue|DatumType|Token
    5. 对于PCD 的定义,一定需要先在 dec 文件中定义,之后使用
    1. PcdsFeatureFlag
    1. #
    2. # edk2/MdeModulePkg/MdeModulePkg.dsc
    3. #
    4. [PcdsFeatureFlag]
    5. gEfiMdePkgTokenSpaceGuid.PcdDriverDiagnostics2Disable|TRUE
    6. gEfiMdePkgTokenSpaceGuid.PcdComponentName2Disable|TRUE
    1. PcdsFixedAtBuild
    1. [PcdsFixedAtBuild]
    2. gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x0f
    3. gEfiMdePkgTokenSpaceGuid.PcdReportStatusCodePropertyMask|0x06
    4. gEfiMdeModulePkgTokenSpaceGuid.PcdMaxSizeNonPopulateCapsule|0x0
    1. PcdsPatchableInModule
    1. #
    2. # Core.dsc.inc
    3. #
    4. [PcdsPatchableInModule]
    5. # This PCD should be set to 0 then video resolution could be at highest resolution.
    6. gEfiMdeModulePkgTokenSpaceGuid.PcdVideoHorizontalResolution|0 gEfiMdeModulePkgTokenSpaceGuid.PcdVideoVerticalResolution|0
    1. PcdsDynamic/PcdsDynamicExt
    1. #
    2. # MdeModulePkg.dec
    3. #
    4. [PcdsDynamic, PcdsDynamicEx]
    5. gEfiMdeModulePkgTokenSpaceGuid.PcdS3BootScriptTablePrivateDataPtr|0x0|UINT64|0x00030000

  • 相关阅读:
    我的创作纪念日
    堆排序(838,839)(堆中的元素编号与插入堆的插入序号相映射)
    treevalue——Master Nested Data Like Tensor
    【2023校招刷题】番外篇1:度量科技FPGA岗(大致解析版)
    PTA题目 阶梯电价
    (二十六)大数据实战——kafka集群之Kraft模式安装与部署
    vuejs编译器的目的是什么?
    微信小程序重新加载当前页面、刷新当前页面
    SIP协议软件开发
    word重复上次操作的快捷键的F4没效果了
  • 原文地址:https://blog.csdn.net/kakaBack/article/details/127854504