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 架构中,还有两个额外的安全状态和地址空间:Root和Realm. TF-A 固件在 Root 世界中运行。在领域世界中,领域管理监视器固件 (RMM) 管理领域 VM 的执行以及它们与管理程序的交互。

../_images/arm-cca-software-arch.png

RME 是支持 Arm CCA 的硬件扩展。为了支持 RME,已对 TF-A 进行了各种更改。我们将在下面讨论这些变化。

19.1.1. 转换表库的更改

RME 添加了 Root 和 Realm 物理地址空间。为了支持这一点,翻译 (XLAT) 表库中添加了 两个新的内存类型宏MT_ROOT和。这些宏分别用于将内存区域配置为 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 加载并执行 BL2

(2)BL2 加载包含 RMM 的图像

(3)BL2 将控制权移交给 BL31

(4)BL31 初始化 SPM(如果启用了 SPM)

(5)BL31 初始化 RMM

(6)BL31 将控制权转移到普通世界软件

19.1.4. 颗粒保护表 (GPT) 库

四个物理地址空间之间的隔离是由一个称为粒度保护检查 (GPC) 的过程强制执行的,该过程由 MMU 下游任何地址转换执行。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

本节介绍如何在启用 RME 的情况下构建和运行 TF-A。我们假设您具备构建 TF-A 的所有先决条件。

要启用 RME,您需要在构建 TF-A 时设置 ENABLE_RME 构建标志。目前,该功能仅支持 FVP 平台。

以下说明向您展示了如何在两种情况下使用 RME 构建和运行 TF-A:使用 TF-A 测试的 TF-A,以及使用铪和 TF-A 测试的四世界执行。这些说明假设您已经获得了 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。

  1. 获取并构建 TF-A 测试
git clone https://git.trustedfirmware.org/TF-A/tf-a-tests.git
cd tf-a-tests
make CROSS_COMPILE=aarch64-none-elf- PLAT=fvp DEBUG=1

这会在build/fvp/debug目录中生成一个 TF-A 测试二进制文件 ( tftf.bin ) 。

  1. 构建 TF-A
cd trusted-firmware-a
make CROSS_COMPILE=aarch64-none-elf- \
PLAT=fvp \
ENABLE_RME=1 \
FVP_HW_CONFIG_DTS=fdts/fvp-base-gicv3-psci-1t.dts \
DEBUG=1 \
BL33=<path/to/tftf.bin> \
all fip

这会在build/fvp/debug目录中生成bl1.bin和fip.bin二进制文件。上面的命令也构建了 TRP。TRP 二进制文件打包在fip.bin中。

19.2.2. 使用铪和 TF-A 测试的四世界执行

四世界执行涉及每个安全状态的软件组件:根、安全、领域和非安全。本节介绍如何构建支持四世界的 TF-A。我们使用 TF-A 作为根固件,Hafnium作为安全组件,TRP 作为领域固件,TF-A Tests 作为非安全负载。

在构建 TF-A 之前,您首先需要构建其他软件组件。您可以在上面找到有关如何获取和构建 TF-A 测试的说明。

  1. 获得并建造
git clone --recurse-submodules https://git.trustedfirmware.org/hafnium/hafnium.git
cd hafnium
make PROJECT=reference
Hafnium 二进制文件应位于 out/reference/secure_aem_v8a_fvp_clang/hafnium.bin
  1. 构建 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 fip
19.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
...
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码改变世界ctw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值