安全模式可以访问安全/非安全内存如何?

时间:2014-04-26 03:21:09

标签: linux assembly embedded arm trust-zone

根据CortexA编程指南

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

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

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

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

2 个答案:

答案 0 :(得分:2)

  

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

这里有一个概念问题。没有物理地址 0xA0000000 [NS] 0xA0000000 [S] ,只有物理地址 0xA0000000 。总线控制器使用NS位,如HPROT(用户/主管)访问权限,以检查访问权限上的权限;之后,只有一个物理内存地址存储结果。这样,SDRAM设备不需要知道 TrustZone ,而只需要总线控制器。

您需要设置the partition checker才能拥有全球可共享映射。这是两个世界中的读/写访问。然后,适用scott的信息。如果两个操作系统都有MMU,则创建两个具有相同物理地址的映射。 L1缓存和TLB中可以存在两个存储器和MMU条目的副本。重复的TLB没有问题。写入此存储器后,L1可能需要刷新。将有两行具有相同的数据,但其中一行标有NS而另一行没有。

在这种情况下,

Hyperthreading for fun and profit可能是一篇有趣的论文。

答案 1 :(得分:1)

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

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