安全模式可以访问安全/非安全内存的方式



根据CortexA prog Guide

TrustZone硬件还有效地提供了两个虚拟MMU,每个虚拟处理器一个。这样,每个世界都可以有一组本地的转换表,其中安全世界映射被隐藏并受到保护,不受正常世界的影响。

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

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

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

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

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

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

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

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

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

最新更新