按PROG CortexA指南
TrustZone的硬件还有效地提供了两个虚拟的MMU,一个为每个虚拟处理器。 这使得每个世界有一个本地组转换表,与安全领域的映射隐藏在正常的世界保护。
页表的描述包括NS位,它被用来确定访问是否到安全或非安全的物理地址空间中进行。
虽然页表条目的位仍然存在,正常虚拟处理器硬件不使用此字段,和存储器访问总是与NS = 1安全虚拟处理器作出的,因此可以访问安全或普通存储器。 高速缓存和TLB硬件允许正常和安全项目并存。
所以,如果一个代码(在安全模式下运行)将被写入访问说地址0xA0000000开始[NS]和0xA0000000开始[S]会是怎样编码?
所以,如果一个代码(在安全模式下运行)将被写入访问说地址0xA0000000开始[NS]和0xA0000000开始[S]会是怎样编码?
很可能你有一个概念问题在这里。 没有物理地址0xA0000000开始[NS]和0xA0000000开始[S],只有物理地址0xA0000000开始 。 所述NS
位通过总线控制器所使用,像HPROT
(用户/主管)的访问,以检查在访问权限; 之后,只有一个物理内存地址存储结果。 通过这种方式,将SDRAM设备并不需要是的TrustZone知道,只是总线控制器。
您需要设置分区检查有一个世界共享的映射。 即读两全其美/写访问。 然后将信息作为斯科特给出适用。 如果这两个操作系统,有一个MMU,然后创建两个映射以相同的物理地址。 存储器和MMU条目的两个拷贝可以在L1高速缓冲存储器和TLB存在。 没有与重复的TLB没有问题。 该L1可以写这个内存后需要冲洗。 将有两条线都使用相同的数据,但一个标记NS
和一个没有。
超线程的乐趣和利润可能会在这方面一个有趣的纸。
最简单的方法是建立在安全MMU转换表,都使用物理地址0xA0000000开始,其中一个有NS位设置,另一个副本在具有NS位明确不同的虚拟地址的两个映射。 然后,安全状态可以使用两个虚拟地址,使不同的访问。
你也可以只使用一个映射和改变NS位,但是这需要在每次更改后冲洗TLB。