12- Library at ROM

本文档介绍了可信固件-A(TF-A)中的ROM库实现,包括ROM库的构建过程、索引文件描述、包装函数作用及内存布局影响等内容。

摘要生成于 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学习


12. ROM 库

本文档概述了可信固件-A (TF-A) 中的“ROM 库”实现。

12.1. 介绍

“library at ROM”功能允许平台构建一个函数库,以放置在 ROM 中。这通过利用 ROM 中的可用空间来减少 SRAM 的使用。“ROM 中的库”包含一个跳转表,其中包含放置在 ROM 中的函数列表。“ROM 库”的功能是:

  • (1) 函数可以来自一个或多个库。

  • (2) 功能可以在编程到 ROM 后进行修补。

  • (3) 平台特定的库可以放在 ROM 中。

  • (4) 一个或多个 BL 图像可以访问功能。

12.2. 索引文件

../_images/romlib_design.png

ROM 中的库由索引文件描述,其中包含要放置在 ROM 中的函数列表。索引文件是特定于平台的,其格式为:

lib function    [patch]

lib      -- Name of the library the function belongs to
function -- Name of the function to be placed in library at ROM
[patch]  -- Option to patch the function

也可以使用关键字“reserved”而不是“lib”和“function”名称在列表中插入保留空格,如下所示:

reserved

保留的空间可以用于以后添加更多的功能,而不影响跳转表中已经存在的功能的顺序和位置。此外,为了获得额外的灵活性和模块化,索引文件可以包含其他索引文件。

有关索引文件示例,请参阅lib/romlib/jmptbl.i.

12.3. 包装函数

../_images/romlib_wrapper.png

调用“ROM库”的函数时,调用顺序如下:

BL image –> wrapper function –> jump table entry –> library at ROM

索引文件用于创建放置在 ROM 中的跳转表。然后,包装器引用跳转表来调用“ROM 库”函数。包装器实质上包含指向对应于原始函数的跳转表条目的分支指令。最后,将 BL 图像中的原始函数替换为包装函数。

“library at ROM”包含一个必要的 init 函数,该函数初始化由“library at ROM”中的函数定义的全局变量。

12.4. 脚本

有一个romlib_generate.pyPython 脚本可以为“ROM 库”工作生成必要的文件。它实现了多种功能:

  • (1) romlib_generate.py gentbl [args]- 通过解析索引文件生成跳转表。

  • (2) romlib_generator.py genvar [args]-使用 ROM 中的绝对地址生成跳转表全局变量(不是跳转表本身)。这个全局变量基本上是一个指向跳转表的指针。

  • (3) romlib_generator.py genwrappers [args]- 为索引文件中的每个条目生成一个包装函数,包含关键字的条目除外 patch。生成的包装文件称为<fn_name>.s.

  • (4) romlib_generator.py pre [args]- 预处理索引文件,这意味着它递归地解析文件中的所有包含命令。它还可以生成包含的索引文件的依赖文件,可以直接在makefile中使用。

每个romlib_generate.py功能都有自己的手册,可以通过运行来访问。romlib_generator.py [function] --help

romlib_generate.py需要 Python 3 环境。

12.5。ROM库中的函数补丁

不会为索引文件中包含关键字的条目生成包装器。因此,它允许通过断开与该函数的“ROM 库”版本的链接来从实际库中调用该函数。romlib_generator.py genwrapperspatch

补丁函数的调用顺序如下:

BL 图像 -> 功能

12.6。内存影响

在 ROM 中使用 library 将修改 BL 图像的内存布局:

  • ROM 库需要一个页面对齐的 RAM 部分来保存 RW 数据。此部分由 ROMLIB_RW_BASE 和 ROMLIB_RW_END 宏定义。在 Arm 平台上,1 页 (0x1000) 的一部分分配在 SRAM 的顶部。这将具有将所有 BL 图像下移 1 页的效果。

  • 根据移至 ROM 库的功能,BL 图像的大小将减小。例如:将 MbedTLS 函数移入 ROM 库会减少 BL1 和 BL2,但不会减少 BL31。

  • 在定义 BLx_BASE 宏时,可以考虑 BL 图像大小的这种变化来优化内存布局。

12.7。在 ROM 上构建库

CROSS_COMPILE必须适当设置环境变量。有关设置此变量的更多信息,请参阅 执行初始构建。

在下面的示例中,演示了 ROMLIB 和 mbed TLS 的使用以展示 ROM 库的好处 - 这不是强制性的。

make PLAT=fvp                                                   \
MBEDTLS_DIR=</path/to/mbedtls/>                                 \
TRUSTED_BOARD_BOOT=1 GENERATE_COT=1                             \
ARM_ROTPK_LOCATION=devel_rsa                                    \
ROT_KEY=plat/arm/board/common/rotpk/arm_rotprivk_rsa.pem        \
BL33=</path/to/bl33.bin>                                        \
USE_ROMLIB=1                                                    \
all fip
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Arm精选

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

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

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

打赏作者

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

抵扣说明:

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

余额充值