0

我正在此链接上阅读有关 ARM Trustzone 的信息。我知道使用 TrustZone,可以将内存划分为安全和非安全区域。供应商可以使用它来运行安全的操作系统。

我很好奇的是,这个分区的粒度支持是什么?仅仅是可以有一块内存标记为“安全”,而每个操作系统只能有一个这样的内存块吗?TrustZone 是否有能力为单个进程分配内存?

假设我有一个 Linux 应用程序的 .so 文件(假设示例)。进程 A 中的相同代码是否可以在虚拟地址 0x1000 到 0x2000 中标记为安全,而在进程 B 中可以在虚拟地址 0x5000 到 0x6000 中标记为安全?

4

1 回答 1

1

TrustZone 分区发生在物理内存级别,因此您的问题的进程级别部分并不真正适用。请注意,Linux 作为非安全操作系统甚至看不到安全内存,因此对不可访问地址进行虚拟映射几乎没有用处;然而,安全操作系统确实能够通过其页表条目中的 NS 位映射安全和非安全物理地址。

至于物理分区如何进行,这取决于实现。您的链接所指的TZC-380支持2-16个区域,最小32KB粒度;它的继任者TZC-400有 9 个区域,并且一直到 4KB 粒度。其他实现可能仍然不同,尽管低于 4KB 的粒度不太可能,因为这对于打开 MMU 的 CPU 来说几乎是不可用的。此外,系统中通常有一些东西将仅硬连线到安全内存映射(例如 TZC 的编程接口),并且通常包括一些专用的安全 SRAM。

于 2015-09-14T08:56:50.327 回答