ATF源码篇(八):docs文件夹-Components组件(7)固件配置框架

news2024/7/6 19:52:18

7、固件配置框架 fconf/索引

本文档概述了固件配置框架

7.1 固件配置框架是什么?

1 介绍

固件配置框架(|FCONF|)是平台特定数据的抽象层,允许查询“属性”并检索值,而请求实体不知道使用什么后备存储来保存数据。
它用于连接提供平台特定数据的新方法和旧方法。今天,像信任链这样的信息被保存在几个嵌套的平台定义的表中。将来,它可以作为设备blob的一部分提供,以及关于要加载的图像的其余信息。引入此抽象层将使迁移更容易,并将为无法/不想使用设备树的平台保留功能。

2 访问属性-Accessing properties

|FCONF|中定义的属性围绕命名空间和子命名空间分组:a.b.property。示例命名空间可以是:

  • (|TBBR|)信任链数据:TBBR.cot.trusted_boot_fw_cert
  • (|TBBR|)动态配置信息:TBBR.dyn_config.disable_auth
  • 防护策略:Arm.io_policies.bl2_image
  • GICv3属性:hw_config.GICv3_config.gicr_base

可以使用FCONF_GET_PROPERTY(a,b,PROPERTY)宏访问属性。

3 定义属性

组成|FCONF|的属性必须存储在C结构中。如果属性来自不同的后端源(如设备树),则平台必须提供populate()函数,该函数本质上捕获属性并将其存储到相应的基于|FCONF|的C结构中。

这样的populate()函数通常是特定于平台的,并且与特定的后端源相关联。例如,一个populator函数,它从HW_CONFIG设备树中捕获平台的硬件拓扑。因此,必须使用特定的config_type标识符注册每个populate()函数。它广泛表示配置属性的逻辑分组,通常是设备树文件。

例子:

  • FW_CONFIG:与其他DTB的基地址、最大大小和镜像id等相关的属性。
  • TB_FW:与可信固件相关的属性,如IO策略、mbedtls堆信息等。
  • HW_CONFIG:与SoC硬件配置相关的属性,如拓扑、GIC控制器、PSCI挂钩、CPU ID等。

因此,populate()回调必须使用FCONF_REGISTER_POPULATION()宏注册到(|FCONF|)框架。这确保了在初始化期间在通用fconf_populate()函数内调用该函数。

int fconf_populate_topology(uintptr_t config)
{
    /* read hw config dtb and fill soc_topology struct */
}

FCONF_REGISTER_POPULATOR(HW_CONFIG, topology, fconf_populate_topology);

然后,必须提供一个包装以匹配FCONF_GET_PROPERTY()宏:

/* generic getter */
#define FCONF_GET_PROPERTY(a,b,property)    a##__##b##_getter(property)

/* my specific getter */
#define hw_config__topology_getter(prop) soc_topology.prop

此二级包装器可用于将FCONF_GET_PROPERTY()重新映射到任何适当的对象:结构、数组、函数等。
为了确保对属性的良好解释,本文档必须解释如何为特定后端描述属性。有关更多信息和示例,请参阅:ref:bindingdocument部分。

4 Loading the property device tree -加载属性设备树

必须调用fconf_load_config(image_id)来加载包含属性值的fw_config和tb_fw_config设备树。这必须在io层初始化后完成,因为|DTB|存储在外部设备(FIP)上。

.. uml:: ../../resources/diagrams/plantuml/fconf_bl1_load_config.puml

5 填充属性

一旦有效的设备树可用,就可以使用fconf_populate(config)函数用config|DTB|中的数据填充C数据结构。此函数将调用所有已使用FCONF_REGISTER_POPULATION()注册的populate()回调,如上所述。

.. uml:: ../../resources/diagrams/plantuml/fconf_bl2_populate.puml

6 命名空间指南

如上所述,属性在逻辑上围绕名称空间和子名称空间分组。添加新属性/名称空间时应考虑以下概念。该框架区分了两种类型的属性:

  • 公共代码中使用的属性。
  • 平台特定代码内使用的属性。

第一类适用于作为固件的一部分并在多个平台上共享的属性。它们应该是全局可访问的,并在lib/fconf目录中定义。必须选择名称空间以反映抽象的特性/数据。

例子:

  • |TBBR |相关属性:TBBR.cot.bl2_id
  • 动态配置信息:dyn_cfg.dtb_info.hw_config_id

第二类应该代表框架中定义的大多数属性:特定于平台的属性。它们只能在平台API内访问,并且只能在平台范围内定义。命名空间必须包含定义的属性所属的平台名称。

例子:

  • Arm-io框架:Arm.io_policies.bl31_id

7 属性绑定信息

.. toctree::
  :maxdepth: 1

  fconf_properties
  amu-bindings
  mpmm-bindings

7.2 FCONF属性的DTB绑定

本文档描述|FCONF|属性的设备树格式。这些属性与特定平台无关,可以从公共代码中查询。

1、动态配置

|FCONF|框架需要具有以下字段的dtb注册表节点:

  • 兼容[强制性]
    • 值类型:<string>
    • 必须是字符串“fconf,dyn_cfg-dtb_registry”。

然后是表示配置|DTB|的子节点列表,|FCONF|可以使用它。每个子节点应根据其包含的信息进行命名,并且必须由以下字段组成:

  • 加载地址[强制]
    • 值类型:
    • 配置的物理加载基地址。
  • 最大尺寸[强制要求]
    • 值类型:
    • 配置的最大大小。
  • id[必填]
    • 值类型:
    • 配置的镜像ID。
  • ns加载地址[可选]
    • 值类型:
    • 非安全内存中配置的物理加载基地址。仅适用于需要加载到安全存储器(加载地址)以及非安全存储器(例如HW_CONFIG)中的配置文件

7.3 活动监视器单元(AMU)绑定

为了通过FCONF支持平台定义的活动监视器单元(|AMU|)辅助计数器,HW_CONFIG设备树接受几个|AMU|-特定的节点和属性。

  • 绑定

    • /cpus/cpus/cpu*节点属性
    • /cpus/amus节点属性
    • /cpus/amus/amu*节点属性
    • /cpus/amus/amu*/counter*节点属性
  • /cpus/cpus/cpu*节点属性

cpu节点已被增强,以支持关联|AMU|视图的句柄,该视图应描述内核提供的计数器。
在这里插入图片描述

  • /cpus/amus节点属性
    ams节点描述了由系统中的核心实现的|AMU|。此节点没有任何属性。
  • /cpus/amus/amu*节点属性
    amu节点描述一个或多个|amu|的辅助计数器寄存器的布局和含义,并且可以由多个核共享。

在这里插入图片描述

  • /cpus/amus/amu*/counter*节点属性
    计数器节点描述属于父|AMU|视图的辅助计数器。

在这里插入图片描述

栗子

提供由两个集群组成的四个核心的示例系统,其中每个集群的核心共享不同的|AMU|,可以使用以下内容:

cpus {
    #address-cells = <2>;
    #size-cells = <0>;

    amus {
        amu0: amu-0 {
            #address-cells = <1>;
            #size-cells = <0>;

            counterX: counter@0 {
                reg = <0>;

                enable-at-el3;
            };

            counterY: counter@1 {
                reg = <1>;

                enable-at-el3;
            };
        };

        amu1: amu-1 {
            #address-cells = <1>;
            #size-cells = <0>;

            counterZ: counter@0 {
                reg = <0>;

                enable-at-el3;
            };
        };
    };

    cpu0@00000 {
        ...

        amu = <&amu0>;
    };

    cpu1@00100 {
        ...

        amu = <&amu0>;
    };

    cpu2@10000 {
        ...

        amu = <&amu1>;
    };

    cpu3@10100 {
        ...

        amu = <&amu1>;
    };
}

在这种情况下,cpu0和cpu1(第一个集群中的两个核心)共享amu0定义的AMU的视图。同样,cpu2和cpu3(第二个集群中两个核)共享amu1定义的|AMU|的视图。这将导致cpu0与cpu1都启用counterX和counterY,而cpu2与cpu2都启用了counterZ。

7.4 最大功率缓解机制(MPMM)绑定

固件无法在运行时确定MPMM支持。相反,这些DTB绑定允许平台通过HW_CONFIG设备树blob对|MPMM|的每个核心就是否支持进行通信。

绑定

  • /cpus/cpus/cpu*节点属性
    cpu节点已被增强,以允许平台在给定内核上表示对|MPMM|的支持。
    在这里插入图片描述
    栗子
    提供两个内核的示例系统,一个支持|MPMM|,另一个不支持,可以描述如下:
cpus {
    #address-cells = <2>;
    #size-cells = <0>;

    cpu0@00000 {
        ...

        supports-mpmm;
    };

    cpu1@00100 {
        ...
    };
}

小节

这一章其实就是教你怎么配置设备树的,这些属性是什么意思,相应支持实现什么功能,你应该去添加什么元素。

8、固件更新-firmware-update

9、引导方式-measured_boot/index

每毫米英里
平台中断控制器API
ras公司
romlib设计
sdei公司
安全分区管理器
安全分区管理器mm
xlat-tables-lib-v2-设计
胶布装订
领域管理扩展
颗粒保护台设计

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

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

相关文章

Java接口(Interface)

文章目录接口语法注意事项和细节实现接口VS.继承类接口的多态特性小练习usb插槽就是现实中的接口。 你可以把手机,相机,u盘都插在usb插槽上,而不用担心那个插槽是专门插哪个的,原因是做usb插槽的厂家和做各种设备的厂家都遵守了统一的规定包括尺寸&#xff0c;排线等等。 首先创…

ISP-Gamma

参考:https://blog.csdn.net/lxy201700/article/details/24929013 http://www.cambridgeincolour.com/tutorials/gamma-correction.htm 1. 什么是Gamma Gamma是一种指数曲线&#xff0c;显示器用这个指数曲线来调整真实输出到显示屏幕上的颜色值&#xff0c;以此更好的适应人…

卷?这份Java后端架构指南首次公开就摘星百万,肝完直接60K+

最近和各位小伙伴儿私下聊的比较多&#xff0c;各个阶段的朋友都有&#xff1b;因为大环境的内卷&#xff0c;导致大家在求学、求职、提升自己的各个方面都多多少少有些迷茫焦虑&#xff1b; 这些其实是一个非常普遍且正常的现象&#xff0c;会焦虑的人&#xff0c;往往都是对…

大学生简单个人静态HTML网页设计作品 HTML+CSS制作我的家乡杭州 DIV布局个人介绍网页模板代码 DW学生个人网站制作成品下载 HTML5期末大作业

常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、 茶叶、 家居、 酒店、 舞蹈、 动漫、 服装、 体育、 化妆品、 物流、 环保、 书籍、 婚纱、 游戏、 节日、 戒烟、 电影、 摄影、 文化、 家乡、 鲜花、 礼品、 汽车、 其他等网页设计题目, A…

蓝牙学习一(简介)

1.简介 蓝牙分为经典蓝牙&#xff08;BT-Bluetooth&#xff09;和低功耗蓝牙&#xff08;BLE-Bluetooth Low Energy&#xff09;&#xff0c;本次主要学习BLE。 BLE分了很多个版本&#xff0c;现在用的比较多的就是4.2和5.X。那4.2到5.0之间有哪些升级呢&#xff1f;首先&#…

多肽标签X-press,DLYDDDDK

X-press Tag Peptide 是一种N-端前导肽&#xff0c;Anti-Xpress 抗体能够识别 Xpress 表位&#xff0c;因此&#xff0c;该多肽可用来纯化 X-press Tag 融合蛋白。X-press Tag Peptide is a tag peptide used for protein purification. X-press Tag is also an N-terminal lea…

【附源码】计算机毕业设计JAVA商院足球赛事管理

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot mybatis Maven Vue 等等组成&#xff0c;B/…

CAPL语言编译的那些事

CAPL是类似于C语言的面向过程语言,这是众所周知的。C或C++代码在执行前需要编译成机器语言,也就是二进制语言,如此能够更快速运行。CAPL程序也是一样的,需要编译后执行 在CAPL Browser编辑器下,Home -> Compile/Compile All,Compile编译当前打开的CAPL文件,Compile A…

基于51单片机的可调节占空比四种三种波形发生器proteus仿真

简介&#xff1a; 该系统显示器为LCD1602&#xff0c;可实时显示波形的参数情况可显示四种波形&#xff0c;分别是正弦波 三角波方波以及锯齿波该系统可以通过按键调节波形的占空比波形输出通过仿真软件的示波器可以查看得到波形发生器的核心芯片是利用DAC0832产生运放LM324经…

Jenkins部署的Windows爬虫机如何配置

文章目录一 安装软件1. Python爬虫必备安装包2. Visual Studio Code3. Git3.1. 备选 - OneDrive4. Java5. 向日葵二 配置Chrome1. 查看Chrome版本2. 下载ChromeDriver3. 解压放入Python的Scripts文件夹有时候, 一台Windows只是用来部署一些任务, 例如爬虫任务. 这个时候需要简单…

【人见人爱报错系列】GIt常见问题解决大全

前言 在使用的github\gitlab各种hub的过程中&#xff0c;会遇到各种各样的小问题&#xff0c;这些会给程序员们带来五光十色的烦恼&#xff0c;本文总结使用git的各种问题并持续更新。 一、Git用户名邮箱设置 使用git过程中&#xff0c;会切换不同项目但是发现提交人都是一样…

M1 芯片 MacBook 结合 MAMP 集成环境配置 PHP 环境变量

MacOS Catalina 版本之后 shell 改为使用 zsh 。 可以使用 echo $SHELL 命令查看。 配置文件分为系统级&#xff08;所有用户生效&#xff09;和用户级&#xff08;当前登录用户生效&#xff09;&#xff0c;可以自行了解&#xff0c;一般不经常切换用户的话&#xff0c;用户…

【Java多数据源实现教程】实现动态数据源、多数据源切换方式

前言 本文为 【Java多数据源实现教程】 相关知识&#xff0c;由于自己最近在做导师的项目的时候需要使用这种技术&#xff0c;于是自学了相关技术原理与实现&#xff0c;并将其整理如下&#xff0c;具体包含&#xff1a;多数据源的典型使用场景&#xff08;包含业务复杂场景、读…

JavaWeb:JavaWeb技术架构演进

Java Web&#xff0c;是用 Java 技术来解决相关web互联网领域的技术栈。web 包括&#xff1a;web 服务端和 web 客户端两部分。Java 在客户端的应用有 Java Applet&#xff0c;不过使用得很少&#xff0c;Java 在服务器端的应用非常的丰富&#xff0c;比如 Servlet&#xff0c;…

【MySQL数据库笔记 - 进阶篇】(四)视图/存储过程/触发器

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 &#x1f4da;专栏地址&#xff1a;暂定 &#x1f4dd;视频地址&#xff1a;黑马程序员 MySQL数据库入门到精通 &#x1f4e3;专栏定位&#xff1a;这个专栏我将会整理 B 站黑马程序员的 MySQL…

将多张图片制作gif

如何将多张图片制作gif&#xff1f;gif其实也是一种比较常见的图片格式&#xff0c;不过gif和其它图片有很大区别&#xff0c;gif是一种动态图片&#xff0c;相信很多小伙伴都知道。我们每天几乎也会看到或者使用到gif动图&#xff0c;有些gif动图是由几张静态的普通图片合并而…

深入理解java虚拟机-1.自动内存管理

文章目录1、自动内存管理1.1 Java内存区域与内存溢出异常1.1.1 运行时数据区域程序计数器程序计数器为什么是私有的?java虚拟机栈本地方法栈虚拟机栈和本地方法栈为什么是私有的?Java堆创建的对象一定会放在堆中吗&#xff1f;方法区运行时常量池直接内存1.1.2 HotSpot虚拟机…

渗透测试之信息收集

信息收集1.域名信息收集1.1.whois查询1.1.1.whois解释1.1.2.whois收集  1.1.2.1.在线网站查询  1.1.2.2.工具查询1.2.反查1.3.备案信息查询1.3.1.备案信息收集1.4.子域名收集1.4.1.子域名解释1.4.2.子域名收集  1.4.2.1.在线网站收集  1.4.2.2.工具收集  1.4.2.3.Goo…

【教学类-13-03】20221118《数字色块图5*7*8-A4横板-横切》(大班主题《》)

效果展示&#xff08;一张8个图&#xff0c;对半横切&#xff08; 打印效果图、中间剪开成2分&#xff08;白色废纸&#xff09; 背景需求&#xff1a; 前期中3班制作5*7 *9张数字图&#xff0c;幼儿找出数字的人数更多 我还希望在大班进行数字图涂色练习。为了增加难度&#…

Wireshark TS | 访问网页失败

前言 访问网页失败也是日常比较常见的问题之一&#xff0c;导致问题的原因可能有很多种&#xff0c;像是客户端、浏览器、服务器或者网络等等&#xff0c;自然具体问题得具体分析。本篇以一个实际案例来说明下 TCP 连接相关的问题&#xff0c;该数据包仍然来自于 Wireshark sh…