根据此链接 http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0333h/Chdfjdgi.html
在下面
系统启动顺序...
对分区检查器进行编程以分配可用于非安全操作系统的物理内存。
什么是分区检查器?它是一个有寄存器的子系统,它的编程模型是什么?
根据此链接 http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0333h/Chdfjdgi.html
在下面
系统启动顺序...
对分区检查器进行编程以分配可用于非安全操作系统的物理内存。
什么是分区检查器?它是一个有寄存器的子系统,它的编程模型是什么?
什么是分区检查器?
它超出了 CPU 的TrustZone规范。然而,简而言之,它将内存空间划分或划分为不同的允许访问。如果不允许访问,则会引发外部 BUS 错误。
它是一个有寄存器的子系统,它的编程模型是什么?
通常,它是一堆寄存器。它可能是多个注册文件。例如,一个 APB(外围总线)、AHB(旧 ARM 总线)和一个新的 AXI(TrustZone 感知总线)可能都存在于一个系统中。甚至可能有多个 APB 总线等。
从同一页面,
TrustZone 内存管理的原理是将物理内存划分为 Secure 和 Non-secure 区域。
应该补充的是,将master分区为安全和非安全也很重要。分区超出了ARM CPU TrustZone 规范;它是 BUS 架构的一部分。由总线控制器/结构来实现这一点。总线控制器连接了主设备(CPU、DMA 外设等)和从设备(存储设备、寄存器接口等)。
ARM TrustZone 文档上下文中的分区有点模糊,因为它取决于每个 SOC 和总线控制器(和层次结构)来实现细节。如上所述,它将内存空间划分或划分为不同的允许访问。这就像使用传统 ARM ( AMABA ) AHB 总线的主管与用户访问。AXI 接口增加了NS
一点。
以下是总线控制器支持的可能组合。
| Read | Write
-------------+--------+-------
Normal User | yes/no | yes/no
Normal Super | yes/no | yes/no
Secure User | yes/no | yes/no
Secure Super | yes/no | yes/no
该SCR
NS
位将动态确定是否在总线访问时设置了“NS”位。这是TrustZone的不同之处。对于super和user来说,有一个传统的HPROT
位。同样,每个主机都会断言一个 WRITE/~READ 信号(可能极性不同,但我们是软件而不是硬件)。
DMA 主机(以太网、USB 等)也可以向 BUS 发送请求。通常,这些是在引导时设置和锁定的。如果您的安全世界使用以太网,那么它可能是访问安全内存的安全 DMA 主机。以太网芯片通常还具有从属寄存器接口。它必须被标记(或分区)为安全的。如果正常世界访问以太网寄存器文件,则会引发 BUS 错误。供应商还可以制造NS
根据命令结构动态设置位的 DMA 外设。CAAM是一个加密驱动程序,可以设置工作描述来处理正常和安全访问,作为 DMA 主机的示例,它同时执行这两种操作。
CPU(比如 Cortex-M4 或 Cortex-R)也可能是全局安全的或正常的。只有具有完整TrustZone的 Cortex-A 系列(和 ARMv6)才会动态切换NS位,从而使 CPU 既安全又正常,具体取决于上下文。
从外设可能会被分区。例如,前 10MB 的 SDRAM 可能既是正常的又是安全的读写,用于世界间的通信。然后是下一个 54MB,对于普通世界来说可能只是普通的读/写。然后是安全世界的最后 64MB 读/写安全。通常,外围设备的寄存器接口是全部或全部设置。
这些都超出了 MMU 的范围,只处理物理地址。如果 SOC 在启动后锁定它们,任何人都无法更改映射。如果安全世界代码是只读的,那么设计漏洞利用可能会更加困难。
通常,所有 APB 总线都分层在 AHB 总线上,该总线像树一样连接到 AXI 主总线。AXI 总线是 Cortex-A 的默认设置。每个 BUS 都会有一个从属和主控列表,并支持各种“是”和“否”配置,这可能是上述列表的一个子集;即,它可能不关心读/写或超级/用户或其他一些排列。每个 ARM 系统都会有所不同。在某些情况下,供应商甚至可能不支持它。在这种情况下,使系统安全甚至使用 TrustZone 可能会更加困难。请参阅:处理 ARM TrustZones</a>,其中涉及一些总线问题的细节较少。
请参阅:TrustZone 与 Hypervisor,其中提供了更多详细信息。