19-Realm Management Extension (RME)
引流關(guān)鍵詞: 中斷、同步異常、異步異常、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、安全、內(nèi)存管理、頁表…
快速鏈接:
.
👉👉👉 個人博客筆記導(dǎo)讀目錄(全部) 👈👈👈
[專欄目錄]-ATF/FF-A/specification學(xué)習(xí)
19.領(lǐng)域管理擴展(RME)
FEAT_RME(或簡稱 RME)是 Armv9-A 擴展,是 Arm 機密計算架構(gòu) (Arm CCA)的一個組件。TF-A 從 2.6 版開始支持 RME。本章討論了對 TF-A 的更改以支持 RME,并提供有關(guān)如何使用 RME 構(gòu)建和運行 TF-A 的說明。
19.1. TF-A 中的 RME 支持
下圖顯示了以 TF-A 作為 EL3 固件的 Arm CCA 軟件架構(gòu)。在 Arm CCA 架構(gòu)中,還有兩個額外的安全狀態(tài)和地址空間:Root和Realm. TF-A 固件在 Root 世界中運行。在領(lǐng)域世界中,領(lǐng)域管理監(jiān)視器固件 (RMM) 管理領(lǐng)域 VM 的執(zhí)行以及它們與管理程序的交互。
RME 是支持 Arm CCA 的硬件擴展。為了支持 RME,已對 TF-A 進行了各種更改。我們將在下面討論這些變化。
19.1.1. 轉(zhuǎn)換表庫的更改
RME 添加了 Root 和 Realm 物理地址空間。為了支持這一點,翻譯 (XLAT) 表庫中添加了 兩個新的內(nèi)存類型宏MT_ROOT和。這些宏分別用于將內(nèi)存區(qū)域配置為 Root 或 Realm。MT_REALM
注意:只有版本 2 的轉(zhuǎn)換表庫支持新的內(nèi)存類型。
19.1.2. 上下文管理的變化
為 Realm 世界添加了一個新的 CPU 上下文。現(xiàn)有的 CPU 上下文管理 API可用于管理 Realm 上下文。
19.1.3. 引導(dǎo)流程更改
在典型的 TF-A 引導(dǎo)流程中,BL2 在 Secure-EL1 上運行。然而,當(dāng)啟用 RME 時,TF-A 在 EL3 的根世界中運行。因此,啟動流程被修改為在啟用 RME 時在 EL3 處運行 BL2。除此之外,BL2 在 Realm 物理地址空間中加載 Realm-world 固件 (RMM)。
啟用 RME 時的引導(dǎo)流程如下所示:
(1)BL1 在 EL3 加載并執(zhí)行 BL2
(2)BL2 加載包含 RMM 的圖像
(3)BL2 將控制權(quán)移交給 BL31
(4)BL31 初始化 SPM(如果啟用了 SPM)
(5)BL31 初始化 RMM
(6)BL31 將控制權(quán)轉(zhuǎn)移到普通世界軟件
19.1.4. 顆粒保護表 (GPT) 庫
四個物理地址空間之間的隔離是由一個稱為粒度保護檢查 (GPC) 的過程強制執(zhí)行的,該過程由 MMU 下游任何地址轉(zhuǎn)換執(zhí)行。GPC 利用根世界中的顆粒保護表 (GPT) 來描述每個頁面(顆粒)的物理地址空間分配。添加了一個 GPT 庫,該庫提供了用于初始化 GPT 和在不同物理地址空間之間轉(zhuǎn)換顆粒的 API。有關(guān) GPT 庫的更多信息,請參見 Granule Protection Tables Library一章。
19.1.5。RMM 調(diào)度程序 (RMMD)
RMMD 是一種新的標準運行時服務(wù),用于處理向 Realm 世界的切換。它初始化 RMM 并處理來自非安全和領(lǐng)域世界的領(lǐng)域管理接口 (RMI) SMC 調(diào)用。
19.1.6。測試領(lǐng)??域有效負載 (TRP)
TRP 是在 R-EL2 上運行的小型測試負載,它實現(xiàn)了領(lǐng)域管理接口 (RMI) 命令的子集,主要測試 EL3 固件以及 R-EL2 和 EL3 之間的接口。在啟用 RME 構(gòu)建 TF-A 時,如果未提供 RMM 映像的路徑,則 TF-A 默認構(gòu)建 TRP 并將其用作 RMM 映像。
19.2. 使用 RME 構(gòu)建和運行 TF-A
本節(jié)介紹如何在啟用 RME 的情況下構(gòu)建和運行 TF-A。我們假設(shè)您具備構(gòu)建 TF-A 的所有先決條件。
要啟用 RME,您需要在構(gòu)建 TF-A 時設(shè)置 ENABLE_RME 構(gòu)建標志。目前,該功能僅支持 FVP 平臺。
以下說明向您展示了如何在兩種情況下使用 RME 構(gòu)建和運行 TF-A:使用 TF-A 測試的 TF-A,以及使用鉿和 TF-A 測試的四世界執(zhí)行。這些說明假設(shè)您已經(jīng)獲得了 TF-A。您可以使用以下命令克隆 TF-A。
git clone https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git要運行測試,您需要一個 FVP 模型。請使用最新版本的FVP_Base_RevC-2xAEMvA模型。
注意: ENABLE_RME 構(gòu)建選項目前是實驗性的。
19.2.1. 使用 TF-A 測試構(gòu)建 TF-A
使用以下說明使用TF-A 測試作為非安全有效負載 (BL33) 構(gòu)建 TF-A。
這會在build/fvp/debug目錄中生成一個 TF-A 測試二進制文件 ( tftf.bin ) 。
這會在build/fvp/debug目錄中生成bl1.bin和fip.bin二進制文件。上面的命令也構(gòu)建了 TRP。TRP 二進制文件打包在fip.bin中。
19.2.2. 使用鉿和 TF-A 測試的四世界執(zhí)行
四世界執(zhí)行涉及每個安全狀態(tài)的軟件組件:根、安全、領(lǐng)域和非安全。本節(jié)介紹如何構(gòu)建支持四世界的 TF-A。我們使用 TF-A 作為根固件,Hafnium作為安全組件,TRP 作為領(lǐng)域固件,TF-A Tests 作為非安全負載。
在構(gòu)建 TF-A 之前,您首先需要構(gòu)建其他軟件組件。您可以在上面找到有關(guān)如何獲取和構(gòu)建 TF-A 測試的說明。
在啟用 RME 和 SPM 的情況下構(gòu)建 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 測試應(yīng)該啟動并運行默認測試,包括 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輸出的底部應(yīng)如下所示。
...> 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 ...總結(jié)
以上是生活随笔為你收集整理的19-Realm Management Extension (RME)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 13-SDEI: Software De
- 下一篇: 20-Granule Protectio