引流关键词: 中断、同步异常、异步异常、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. 索引文件
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. 包装函数
调用“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