• 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

  • 相关阅读:
    Log4j2配置属性详解(图+文+案例)
    MySQL总结
    【MySQL】就这一篇帮你解决 MySQL 磁盘占用过高的问题
    建议收藏,PMP应战篇(2)之易混淆知识点
    C#学习 - 初识类型、变量、方法
    Redis实战案例及问题分析之分布式锁解决优惠券秒杀场景集群并发下的安全问题
    【通信原理笔记】【二】随机信号分析——2.2 平稳随机过程
    【论文笔记】—低照度图像增强—Supervised—RetinexNet—2018-BMVC
    高校如何基于云原生构建面向未来的智慧校园?全栈云原生VS传统技术架构
    gtest从一无所知到熟练运用(1)gtest安装
  • 原文地址:https://blog.csdn.net/kakaBack/article/details/127854504