06-Firmware Configuration Framework

本文档介绍了固件配置框架(FCONF),一种用于抽象平台特定数据的机制,支持通过查询属性并检索值来实现数据的灵活管理和迁移。FCONF通过命名空间和子命名空间组织属性,提供populate()函数来填充属性值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引流关键词: 中断、同步异常、异步异常、irq、fiq、BL1,BL2,BL3,BL31,BL32,BL33,AP_BL1,AP_BL2,AP_BL3,AP_BL31,AP_BL32,AP_BL33,SCP_BL1,SCP_BL2,BL0,BL30, optee、ATF、TF-A、Trustzone、optee3.14、MMU、VMSA、cache、TLB、arm、armv8、armv9、TEE、安全、内存管理、页表…

快速链接:
.
👉👉👉 个人博客笔记导读目录(全部) 👈👈👈


[专栏目录]-ATF/FF-A/specification学习

请添加图片描述


6.固件配置框架

本文档提供了FCONF框架的概述。

6.1。介绍

固件配置框架 ( FCONF ) 是平台特定数据的抽象层,允许查询“属性”并检索值,而请求实体不知道使用什么后备存储来保存数据。

它用于连接提供特定平台数据的新旧方式。今天,像信任链这样的信息保存在几个嵌套的平台定义表中。将来,它可能会作为设备 blob 的一部分提供,以及有关要加载的图像的其余信息。引入此抽象层将使迁移更容易,并将保留不能/不想使用设备树的平台的功能。

6.2. 访问属性

FCONF中定义的属性围绕命名空间和子命名空间进行分组:abproperty。示例命名空间可以是:

  • ( TBBR ) 信任链数据:tbbr.cot.trusted_boot_fw_cert

  • ( TBBR ) 动态配置信息:tbbr.dyn_config.disable_auth

  • Arm io 策略:arm.io_policies.bl2_image

  • GICv3 属性:hw_config.gicv3_config.gicr_base

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

6.3. 定义属性

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

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

例子:

  • FW_CONFIG:其他 DTB 的基地址、最大尺寸和图像 id 等相关的属性。

  • TB_FW:与可信固件相关的属性,例如 IO 策略、mbedtls 堆信息等。

  • HW_CONFIG:与 SoC 硬件配置相关的属性,例如拓扑、GIC 控制器、PSCI 挂钩、CPU ID 等。

因此,populate()必须使用宏将回调注册到 ( FCONF ) 框架FCONF_REGISTER_POPULATOR()。这确保了该函数将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()到任何适当的位置:结构、数组、函数等。

为确保对属性的良好解释,本文档必须解释如何为特定后端描述属性。有关更多信息和示例,请参阅 属性绑定信息部分。

6.4. 加载属性设备树

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

在这里插入图片描述

6.5。填充属性

一旦有效的设备树可用,该fconf_populate(config)函数可用于使用来自配置DTB的数据填充 C 数据结构。此函数将调用所有populate()已注册的回调,FCONF_REGISTER_POPULATOR()如上所述。

在这里插入图片描述

6.6. 命名空间指南

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

  • 公共代码中使用的属性。

  • 在平台特定代码中使用的属性。

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

例子:

  • TBBR相关属性:tbbr.cot.bl2_id

  • 动态配置信息:dyn_cfg.dtb_info.hw_config_id

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

例子:

  • Arm io 框架:arm.io_policies.bl31_id

6.7. 属性绑定信息

6.7.1. FCONF 属性的 DTB 绑定
6.7.2. 活动监视器单元 (AMU) 绑定
6.7.3. 最大功率缓解机制 (MPMM) 绑定
在执行任务: C:\Users\Lenovo\.platformio\penv\Scripts\platformio.exe run --target upload --upload-port COM3 Processing esp32-s3-devkitc-1 (platform: espressif32; board: esp32-s3-devkitc-1; framework: arduino) ------------------------------------------------------------------------------------------------------------------------------------------------------- Verbose mode can be enabled via `-v, --verbose` option CONFIGURATION: https://docs.platformio.org/page/boards/espressif32/esp32-s3-devkitc-1.html PLATFORM: Espressif 32 (6.9.0) > Espressif ESP32-S3-DevKitC-1-N8 (8 MB QD, No PSRAM) HARDWARE: ESP32S3 240MHz, 320KB RAM, 8MB Flash DEBUG: Current (esp-builtin) On-board (esp-builtin) External (cmsis-dap, esp-bridge, esp-prog, iot-bus-jtag, jlink, minimodule, olimex-arm-usb-ocd, olimex-arm-usb-ocd-h, olimex-arm-usb-tiny-h, olimex-jtag-tiny, tumpa) PACKAGES: - framework-arduinoespressif32 @ 3.20017.0 (2.0.17) - tool-esptoolpy @ 1.40501.0 (4.5.1) - tool-mkfatfs @ 2.0.1 - tool-mklittlefs @ 1.203.210628 (2.3) - tool-mkspiffs @ 2.230.0 (2.30) - toolchain-riscv32-esp @ 8.4.0+2021r2-patch5 - toolchain-xtensa-esp32s3 @ 8.4.0+2021r2-patch5 LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf LDF Modes: Finder ~ chain, Compatibility ~ soft Found 37 compatible libraries Scanning dependencies... Dependency Graph |-- ESP32Servo @ 3.0.7 |-- Servo @ 1.2.2 |-- ESPAsyncWebServer-esphome @ 3.4.0 |-- WiFi @ 2.0.0 Building in release mode Retrieving maximum program size .pio\build\esp32-s3-devkitc-1\firmware.elf Checking size .pio\build\esp32-s3-devkitc-1\firmware.elf Advanced Memory Usage is available via "PlatformIO Home > Project Inspect" RAM: [= ] 13.4% (used 44000 bytes from 327680 bytes) Flash: [== ] 22.3% (used 746557 bytes from 3342336 bytes) Configuring upload protocol... AVAILABLE: cmsis-dap, esp-bridge, esp-builtin, esp-prog, espota, esptool, iot-bus-jtag, jlink, minimodule, olimex-arm-usb-ocd, olimex-arm-usb-ocd-h, olimex-arm-usb-tiny-h, olimex-jtag-tiny, tumpa CURRENT: upload_protocol = esptool Looking for upload port... Using manually specified: COM3 Uploading .pio\build\esp32-s3-devkitc-1\firmware.bin esptool.py v4.5.1 Serial port COM3 A fatal error occurred: Could not open COM3, the port doesn't exist *** [upload] Error 2
最新发布
06-14
* 正在执行任务: platformio run --target upload Processing fishbot (platform: espressif32; board: esp32-c3-devkitm-1; framework: arduino) ---------------------------------------------------------------------------------------------- Verbose mode can be enabled via `-v, --verbose` option CONFIGURATION: https://docs.platformio.org/page/boards/espressif32/esp32-c3-devkitm-1.html PLATFORM: Espressif 32 (6.10.0) > Espressif ESP32-C3-DevKitM-1 HARDWARE: ESP32C3 160MHz, 320KB RAM, 4MB Flash DEBUG: Current (cmsis-dap) External (cmsis-dap, esp-bridge, esp-builtin, esp-prog, iot-bus-jtag, jlink, minimodule, olimex-arm-usb-ocd, olimex-arm-usb-ocd-h, olimex-arm-usb-tiny-h, olimex-jtag-tiny, tumpa) PACKAGES: - framework-arduinoespressif32 @ 3.20017.241212+sha.dcc1105b - tool-esptoolpy @ 1.40501.0 (4.5.1) - tool-mkfatfs @ 2.0.1 - tool-mklittlefs @ 1.203.210628 (2.3) - tool-mkspiffs @ 2.230.0 (2.30) - toolchain-riscv32-esp @ 8.4.0+2021r2-patch5 LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf LDF Modes: Finder ~ chain, Compatibility ~ soft Found 33 compatible libraries Scanning dependencies... No dependencies Building in release mode Retrieving maximum program size .pio/build/fishbot/firmware.elf Checking size .pio/build/fishbot/firmware.elf Advanced Memory Usage is available via "PlatformIO Home > Project Inspect" RAM: [ ] 4.2% (used 13748 bytes from 327680 bytes) Flash: [== ] 18.9% (used 247510 bytes from 1310720 bytes) Configuring upload protocol... AVAILABLE: cmsis-dap, esp-bridge, esp-builtin, esp-prog, espota, esptool, iot-bus-jtag, jlink, minimodule, olimex-arm-usb-ocd, olimex-arm-usb-ocd-h, olimex-arm-usb-tiny-h, olimex-jtag-tiny, tumpa CURRENT: upload_protocol = esptool Warning! Please install `99-platformio-udev.rules`. More details: https://docs.platformio.org/en/latest/core/installation/udev-rules.html Looking for upload port... Auto-detected: /dev/ttyACM0 Uploading .pio/build/fishbot/firmware.bin esptool.py v4.5.1 Ser
03-13
* Executing task in folder work: C:\Users\27632\.platformio\penv\Scripts\platformio.exe run Processing esp32-c3-devkitm-1 (platform: espressif32; board: esp32-c3-devkitm-1; framework: arduino) ----------------------------------------------------------------------------------------------------------------------- Verbose mode can be enabled via `-v, --verbose` option CONFIGURATION: https://docs.platformio.org/page/boards/espressif32/esp32-c3-devkitm-1.html PLATFORM: Espressif 32 (6.10.0) > Espressif ESP32-C3-DevKitM-1 HARDWARE: ESP32C3 160MHz, 320KB RAM, 4MB Flash DEBUG: Current (cmsis-dap) External (cmsis-dap, esp-bridge, esp-builtin, esp-prog, iot-bus-jtag, jlink, minimodule, olimex-arm-usb-ocd, olimex-arm-usb-ocd-h, olimex-arm-usb-tiny-h, olimex-jtag-tiny, tumpa) PACKAGES: - framework-arduinoespressif32 @ 3.20017.241212+sha.dcc1105b - tool-esptoolpy @ 1.40501.0 (4.5.1) - toolchain-riscv32-esp @ 8.4.0+2021r2-patch5 LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf LDF Modes: Finder ~ chain, Compatibility ~ soft Found 34 compatible libraries Scanning dependencies... Dependency Graph |-- Adafruit NeoPixel @ 1.12.5 |-- ESP32 BLE Arduino @ 2.0.0 Building in release mode Retrieving maximum program size .pio\build\esp32-c3-devkitm-1\firmware.elf Checking size .pio\build\esp32-c3-devkitm-1\firmware.elf Advanced Memory Usage is available via "PlatformIO Home > Project Inspect" RAM: [= ] 11.9% (used 38884 bytes from 327680 bytes) Flash: [======== ] 76.6% (used 1004008 bytes from 1310720 bytes) ============================================= [SUCCESS] Took 3.25 seconds ============================================= * Terminal will be reused by tasks, press any key to close it. 这里面有提吗?
03-18
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Arm精选

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值