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