TrustZone 内存分区

TrustZone Memory Partitioning

我正在阅读有关 ARM Trustzone 的文章 link。我知道使用 TrustZone,可以将内存划分为安全区域和非安全区域。供应商可以使用它来 运行 一个安全的 OS.

我很好奇这个分区支持的粒度是多少?是否只是可以有一个标记为 "secure" 的内存块,并且每个 OS 只能有一个这样的内存块? TrustZone 是否具有为单个进程分区内存的能力?

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

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

至于物理分区如何进行,这取决于实现。 TZC-380 your link refers to supports 2-16 regions with a minimum 32KB granularity; its successor the TZC-400 有 9 个区域,一直到 4KB 粒度。其他实现可能仍然不同,尽管低于 4KB 的粒度不太可能,因为这对于打开 MMU 的 CPU 几乎不可用。此外,系统中通常有一些东西将仅硬连线到安全内存映射(例如 TZC 的编程接口),并且通常包括一些专用的安全 SRAM。