根据CortexA程序指南
TrustZone硬件还有效地提供了两个虚拟MMU,每个虚拟处理器一个。这使得每个世界都有一组本地的转换表,安全的世界映射被隐藏起来,不受正常世界的影响。
页表描述包括NS位,其用于确定是对安全物理地址空间还是非安全物理地址空间进行访问。
尽管页表条目位仍然存在,但是正常的虚拟处理器硬件不使用该字段,并且总是在NS = 1的情况下进行存储器访问。因此,安全虚拟处理器可以访问安全或正常的存储器。高速缓存和TLB硬件允许正常和安全条目共存。
因此,如果要将代码(在安全模式下运行)写入访问地址,例如0xA0000000 NS和0xA0000000S,它将如何编码?
发布于 2014-04-27 01:08:24
因此,如果要将代码(在安全模式下运行)写入访问地址,例如0xA0000000 NS和0xA0000000S,它将如何编码?
?
这可能是你在概念上的问题。没有物理地址0xA0000000 NS和0xA0000000S,只有物理地址0xA0000000。NS位由总线控制器使用,如HPROT (用户/监控器)访问,用于检查访问上的权限;之后,只有一个物理存储器地址存储结果。这样,SDRAM设备不需要是TrustZone感知的,而只需要总线控制器。
您需要设置the partition checker才能拥有全球可共享的映射。这就是在这两个领域中的读/写访问。那么scott提供的信息就适用了。如果两个OSes都有一个MMU,则使用相同的物理地址创建两个映射。存储器和MMU条目的两个副本可以存在于L1高速缓存和TLB中。重复的TLB没有问题。写入此存储器后,L1可能需要刷新。将有两行都包含相同的数据,但一行标记了NS,另一行没有标记。
在这种情况下,Hyperthreading for fun and profit可能是一篇有趣的论文。
发布于 2014-04-26 16:34:34
最简单的方法是在安全MMU转换表中建立两个映射,这两个映射都使用物理地址0xA0000000,一个映射设置了NS位,而另一个副本在不同的虚拟地址上清除了NS位。然后,安全状态可以使用这两个虚拟地址进行不同的访问。
您也可以只使用一个映射并更改NS位,但这需要在每次更改后刷新TLB。
https://stackoverflow.com/questions/23306239
复制相似问题