19-Realm Management Extension (RME)
引流關鍵詞: 中斷、同步異常、異步異常、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學習
19.領域管理擴展(RME)
FEAT_RME(或簡稱 RME)是 Armv9-A 擴展,是 Arm 機密計算架構 (Arm CCA)的一個組件。TF-A 從 2.6 版開始支持 RME。本章討論了對 TF-A 的更改以支持 RME,并提供有關如何使用 RME 構建和運行 TF-A 的說明。
19.1. TF-A 中的 RME 支持
下圖顯示了以 TF-A 作為 EL3 固件的 Arm CCA 軟件架構。在 Arm CCA 架構中,還有兩個額外的安全狀態(tài)和地址空間:Root和Realm. TF-A 固件在 Root 世界中運行。在領域世界中,領域管理監(jiān)視器固件 (RMM) 管理領域 VM 的執(zhí)行以及它們與管理程序的交互。
RME 是支持 Arm CCA 的硬件擴展。為了支持 RME,已對 TF-A 進行了各種更改。我們將在下面討論這些變化。
19.1.1. 轉換表庫的更改
RME 添加了 Root 和 Realm 物理地址空間。為了支持這一點,翻譯 (XLAT) 表庫中添加了 兩個新的內存類型宏MT_ROOT和。這些宏分別用于將內存區(qū)域配置為 Root 或 Realm。MT_REALM
注意:只有版本 2 的轉換表庫支持新的內存類型。
19.1.2. 上下文管理的變化
為 Realm 世界添加了一個新的 CPU 上下文。現有的 CPU 上下文管理 API可用于管理 Realm 上下文。
19.1.3. 引導流程更改
在典型的 TF-A 引導流程中,BL2 在 Secure-EL1 上運行。然而,當啟用 RME 時,TF-A 在 EL3 的根世界中運行。因此,啟動流程被修改為在啟用 RME 時在 EL3 處運行 BL2。除此之外,BL2 在 Realm 物理地址空間中加載 Realm-world 固件 (RMM)。
啟用 RME 時的引導流程如下所示:
(1)BL1 在 EL3 加載并執(zhí)行 BL2
(2)BL2 加載包含 RMM 的圖像
(3)BL2 將控制權移交給 BL31
(4)BL31 初始化 SPM(如果啟用了 SPM)
(5)BL31 初始化 RMM
(6)BL31 將控制權轉移到普通世界軟件
19.1.4. 顆粒保護表 (GPT) 庫
四個物理地址空間之間的隔離是由一個稱為粒度保護檢查 (GPC) 的過程強制執(zhí)行的,該過程由 MMU 下游任何地址轉換執(zhí)行。GPC 利用根世界中的顆粒保護表 (GPT) 來描述每個頁面(顆粒)的物理地址空間分配。添加了一個 GPT 庫,該庫提供了用于初始化 GPT 和在不同物理地址空間之間轉換顆粒的 API。有關 GPT 庫的更多信息,請參見 Granule Protection Tables Library一章。
19.1.5。RMM 調度程序 (RMMD)
RMMD 是一種新的標準運行時服務,用于處理向 Realm 世界的切換。它初始化 RMM 并處理來自非安全和領域世界的領域管理接口 (RMI) SMC 調用。
19.1.6。測試領??域有效負載 (TRP)
TRP 是在 R-EL2 上運行的小型測試負載,它實現了領域管理接口 (RMI) 命令的子集,主要測試 EL3 固件以及 R-EL2 和 EL3 之間的接口。在啟用 RME 構建 TF-A 時,如果未提供 RMM 映像的路徑,則 TF-A 默認構建 TRP 并將其用作 RMM 映像。
19.2. 使用 RME 構建和運行 TF-A
本節(jié)介紹如何在啟用 RME 的情況下構建和運行 TF-A。我們假設您具備構建 TF-A 的所有先決條件。
要啟用 RME,您需要在構建 TF-A 時設置 ENABLE_RME 構建標志。目前,該功能僅支持 FVP 平臺。
以下說明向您展示了如何在兩種情況下使用 RME 構建和運行 TF-A:使用 TF-A 測試的 TF-A,以及使用鉿和 TF-A 測試的四世界執(zhí)行。這些說明假設您已經獲得了 TF-A。您可以使用以下命令克隆 TF-A。
git clone https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git要運行測試,您需要一個 FVP 模型。請使用最新版本的FVP_Base_RevC-2xAEMvA模型。
注意: ENABLE_RME 構建選項目前是實驗性的。
19.2.1. 使用 TF-A 測試構建 TF-A
使用以下說明使用TF-A 測試作為非安全有效負載 (BL33) 構建 TF-A。
這會在build/fvp/debug目錄中生成一個 TF-A 測試二進制文件 ( tftf.bin ) 。
這會在build/fvp/debug目錄中生成bl1.bin和fip.bin二進制文件。上面的命令也構建了 TRP。TRP 二進制文件打包在fip.bin中。
19.2.2. 使用鉿和 TF-A 測試的四世界執(zhí)行
四世界執(zhí)行涉及每個安全狀態(tài)的軟件組件:根、安全、領域和非安全。本節(jié)介紹如何構建支持四世界的 TF-A。我們使用 TF-A 作為根固件,Hafnium作為安全組件,TRP 作為領域固件,TF-A Tests 作為非安全負載。
在構建 TF-A 之前,您首先需要構建其他軟件組件。您可以在上面找到有關如何獲取和構建 TF-A 測試的說明。
在啟用 RME 和 SPM 的情況下構建 TF-A。
make CROSS_COMPILE=aarch64-none-elf- \ PLAT=fvp \ ENABLE_RME=1 \ FVP_HW_CONFIG_DTS=fdts/fvp-base-gicv3-psci-1t.dts \ SPD=spmd \ SPMD_SPM_AT_SEL2=1 \ BRANCH_PROTECTION=1 \ CTX_INCLUDE_PAUTH_REGS=1 \ DEBUG=1 \ SP_LAYOUT_FILE=<path/to/tf-a-tests>/build/fvp/debug/sp_layout.json> \ BL32=<path/to/hafnium.bin> \ BL33=<path/to/tftf.bin> \ all fip19.2.3. 運行測試
使用以下命令在 FVP 上運行測試。TF-A 測試應該啟動并運行默認測試,包括 RME 測試。
FVP_Base_RevC-2xAEMvA \ -C bp.flashloader0.fname=<path/to/fip.bin> \ -C bp.secureflashloader.fname=<path/to/bl1.bin> \ -C bp.refcounter.non_arch_start_at_default=1 \ -C bp.refcounter.use_real_time=0 \ -C bp.ve_sysregs.exit_on_shutdown=1 \ -C cache_state_modelled=1 \ -C cluster0.NUM_CORES=4 \ -C cluster0.PA_SIZE=48 \ -C cluster0.ecv_support_level=2 \ -C cluster0.gicv3.cpuintf-mmap-access-level=2 \ -C cluster0.gicv3.without-DS-support=1 \ -C cluster0.gicv4.mask-virtual-interrupt=1 \ -C cluster0.has_arm_v8-6=1 \ -C cluster0.has_branch_target_exception=1 \ -C cluster0.has_rme=1 \ -C cluster0.has_rndr=1 \ -C cluster0.has_amu=1 \ -C cluster0.has_v8_7_pmu_extension=2 \ -C cluster0.max_32bit_el=-1 \ -C cluster0.restriction_on_speculative_execution=2 \ -C cluster0.restriction_on_speculative_execution_aarch32=2 \ -C cluster1.NUM_CORES=4 \ -C cluster1.PA_SIZE=48 \ -C cluster1.ecv_support_level=2 \ -C cluster1.gicv3.cpuintf-mmap-access-level=2 \ -C cluster1.gicv3.without-DS-support=1 \ -C cluster1.gicv4.mask-virtual-interrupt=1 \ -C cluster1.has_arm_v8-6=1 \ -C cluster1.has_branch_target_exception=1 \ -C cluster1.has_rme=1 \ -C cluster1.has_rndr=1 \ -C cluster1.has_amu=1 \ -C cluster1.has_v8_7_pmu_extension=2 \ -C cluster1.max_32bit_el=-1 \ -C cluster1.restriction_on_speculative_execution=2 \ -C cluster1.restriction_on_speculative_execution_aarch32=2 \ -C pci.pci_smmuv3.mmu.SMMU_AIDR=2 \ -C pci.pci_smmuv3.mmu.SMMU_IDR0=0x0046123B \ -C pci.pci_smmuv3.mmu.SMMU_IDR1=0x00600002 \ -C pci.pci_smmuv3.mmu.SMMU_IDR3=0x1714 \ -C pci.pci_smmuv3.mmu.SMMU_IDR5=0xFFFF0475 \ -C pci.pci_smmuv3.mmu.SMMU_S_IDR1=0xA0000002 \ -C pci.pci_smmuv3.mmu.SMMU_S_IDR2=0 \ -C pci.pci_smmuv3.mmu.SMMU_S_IDR3=0 \ -C bp.pl011_uart0.out_file=uart0.log \ -C bp.pl011_uart1.out_file=uart1.log \ -C bp.pl011_uart2.out_file=uart2.log \ -C pctl.startup=0.0.0.0 \ -Q 1000 \ "$@"uart0輸出的底部應如下所示。
...> Test suite 'FF-A Interrupt'Passed > Test suite 'SMMUv3 tests'Passed > Test suite 'PMU Leakage'Passed > Test suite 'DebugFS'Passed > Test suite 'Realm payload tests'Passed ...總結
以上是生活随笔為你收集整理的19-Realm Management Extension (RME)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 13-SDEI: Software De
- 下一篇: 20-Granule Protectio