12- Library at ROM
引流關鍵詞: 中斷、同步異常、異步異常、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 的使用?!癛OM 中的庫”包含一個跳轉表,其中包含放置在 ROM 中的函數列表?!癛OM 庫”的功能是:
-
(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總結
以上是生活随笔為你收集整理的12- Library at ROM的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 11-Reliability, Avai
- 下一篇: 13-SDEI: Software De