1

根据 CortexA prog 指南

TrustZone 硬件还有效地提供了两个虚拟 MMU,每个虚拟处理器一个。这使每个世界都可以拥有一组本地转换表,其中安全世界映射对普通世界隐藏并受到保护。

页表描述包括一个 NS 位,用于确定是否对安全或非安全物理地址空间进行访问。

虽然页表条目位仍然存在,但普通虚拟处理器硬件不使用该字段,并且内存访问总是在 NS = 1 时进行。因此,安全虚拟处理器可以访问安全或普通内存。高速缓存和 TLB 硬件允许正常和安全条目共存。

因此,如果要编写代码(以安全模式运行)以访问地址 0xA0000000 [NS] 和 0xA0000000[S],它将如何编码?

4

2 回答 2

2

因此,如果要编写代码(以安全模式运行)以访问地址 0xA0000000 [NS] 和 0xA0000000[S],它将如何编码?

您可能在这里遇到概念问题。没有物理地址0xA0000000 [NS]0xA0000000[S],只有物理地址0xA0000000。该NS位由总线控制器使用,例如HPROT(用户/主管)访问以检查访问权限;之后,只有一个物理内存地址存储结果。通过这种方式,SDRAM 设备不需要识别 TrustZone,而只需识别总线控制器。

您需要设置分区检查器以拥有世界可共享的映射。这是两个世界的读/写访问。然后斯科特给出的信息适用。如果两个操作系统都有一个 MMU,则创建两个具有相同物理地址的映射。内存和 MMU 条目的两个副本可能存在于 L1 缓存和 TLB 中。重复的 TLB 没有问题。写入此内存后,L1 可能需要刷新。将有两行都具有相同的数据,但一个标记有NS,一个没有。

在这种情况下,为了乐趣和利润而进行的超线程可能是一篇有趣的论文。

于 2014-04-26T17:08:24.463 回答
1

最简单的方法是在安全 MMU 转换表中设置两个映射,它们都使用物理地址 0xA0000000,一个设置了 NS 位,另一个副本位于不同的虚拟地址,NS 位被清除。然后安全状态可以使用这两个虚拟地址进行不同的访问。

您也可以只使用一个映射并更改 NS 位,但这需要在每次更改后刷新 TLB。

于 2014-04-26T08:34:34.283 回答