什么是ARM安全模式下的分区检查程序

时间:2014-04-17 06:22:36

标签: linux arm trust-zone

根据此链接 http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0333h/Chdfjdgi.html

下的

系统启动顺序 ...

对分区检查程序进行编程,以分配可用于非安全操作系统的物理内存。

什么是分区检查程序?它是一个具有寄存器的子系统,它的编程模型是什么?

1 个答案:

答案 0 :(得分:2)

  

什么是分区检查程序?

它位于CPU的 TrustZone 规范之外。但是,在坚果壳中,它将存储空间划分或划分为不同的允许访问。如果不允许访问,则会抛出外部BUS错误

  

它是一个具有寄存器的子系统,它的编程模型是什么?

通常,它是一堆寄存器。它可能是多个寄存器文件。例如,APB(外围总线),AHB(旧的ARM总线)和新的AXI(TrustZone感知总线)都可以存在于一个系统中。甚至可能有多个APB总线等。

从同一页面

  

TrustZone内存管理的原则是将物理内存划分为安全和非安全区域。

应该添加分区 母版作为安全非安全也很重要。 分区在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 用户,有一个传统的HPROT位。同样,每个主机将断言WRITE / ~READ信号(可能极性不同,但我们的软件不是硬件)。

DMA主设备(以太网,USB等)也可以向总线发送请求。通常,这些是在启动时设置和锁定的。如果您的安全世界使用以太网,那么它可能是访问安全内存的安全DMA主设备。以太网芯片通常还具有寄存器接口。必须将其标记(或分区)为 secure 。如果 normal world访问 ethernet 寄存器文件,则抛出BUS错误。供应商还可以根据命令结构制作动态设置NS位的DMA外设。 CAAM加密驱动程序,可以设置作业说明以处理正常安全访问,作为DMA的示例两个都做的主人。

CPU(比如Cortex-M4或Cortex-R)也可以是全局安全正常。只有具有完整 TrustZone 的Cortex-A系列(和ARMv6)才会动态切换 NS 位,从而允许CPU同时安全正常,取决于具体情况。

从属外围设备可能已分区。例如,对于世界间通信,前10MB的SDRAM可能是正常的和安全的读写。然后接下来的54MB,也许只是普通世界的正常读/写。然后为安全世界提供最后64MB的读/写安全保护。通常,外设的寄存器接口是 all或none 设置。

这些都超出了MMU的范围,只处理物理地址。如果SOC在引导后锁定它们,则任何人都无法更改映射。如果安全世界代码是只读,则设计漏洞可能更加困难。

通常,所有APB总线都在AHB总线上分层,AHB总线连接到像树一样的AXI主总线。 AXI总线是Cortex-A的默认总线。每个BUS都有一个从站和主站列表,并支持各种 no 配置,这些配置可能是上面列表的一部分;即,它可能不关心读/写超级/用户或其他一些排列。每个ARM系统都会有所不同。在某些情况下,供应商可能甚至不支持它。在这种情况下,使系统安全甚至使用TrustZone可能更加困难。请参阅:Handling ARM TrustZones‌,其中详细介绍了一些公交车问题。

请参阅:TrustZone versus Hypervisor,其中提供了更多详细信息。