ARM Trustzone 内存别名

ARM Trustzone memory aliasing

提问人:srikanth mucharla 提问时间:10/14/2022 最后编辑:artless noisesrikanth mucharla 更新时间:1/6/2023 访问量:201

问:

我正在尝试了解 ARM Trustzone 实现,并遇到了内存别名,其中根据该地址的第 33 位将相同的内存解释为安全和不安全。我无法理解内存混叠的概念及其使用。你能用一些很好的例子详细解释一下吗?

ARM 信任区域 内存别名

评论


答:

1赞 artless noise 10/14/2022 #1

答案是尝试,

  1. 枚举术语“别名”的重载用法。
  2. 在引用文档的上下文中展示它的含义。

从字面上回答这个问题是困难的,可能不是OP的意图。


从根本上说,“内存别名”意味着两个地址引用同一个内存块。引用的文章更多地针对芯片设计人员,介绍如何解决 TrustZone 系统的问题以及在此类系统中开发 SOC 外设/总线。

我们可以通过指针在直接的“C”代码中具有别名。

void test(void)
{
   char buffer[16];
   char *p1 = &buffer[0], *p2 = p1 + 3.
   strcpy(p1, "This is a test\n");
   // confusion as pointers are referring to same memory chunk.
   memcpy(p1,p2,strlen(p2)+1); 
}

可以优化以执行单词移动。它可能以正向或反向方式复制。当指针别名时,传输内存的顺序和大小很重要。memcpy()

对于缓存,缓存值和“后备存储”(实际内存单元)可能不一致,这还会带来额外的复杂性。有缓存协议可以处理这个问题。协议取决于缓存类型。

  1. VIVT - 虚拟索引,虚拟标记
  2. PIPT - 物理索引,物理标记
  3. VIPT - 虚拟索引,物理标记。

Trustzone 处理物理地址,并增加了额外的一点。对于 SOC 供应商,您可以有一个外围设备,该外设使用两个内存地址来引用同一单元。这也是“混叠”。所以两个指针实际上背后有相同的记忆。这样可以方便地不在 SOC 模块中处理 TrustZone,而只是在总线连接中提供别名。因此,外设将响应两个不同的地址范围。这在 TrustZone 机制中是隐含的。安全地址清除“NS”(地址位 33),正常访问设置“NS”(地址位 33)。

缓存需要处理物理地址,这可能会导致缓存协议出现问题。一个简单的解决方法是不允许缓存重复的地址。“C”中的地址是相同的指针值;但被 CPU 世界修改。

你能用一些很好的例子详细解释一下吗?

不是真正的示例代码。我必须提供一些 Verilog 代码和总线连接到 SOC 外设和主机以及带有协议的缓存。我认为上面的解释在没有“例子”的情况下就足够了。

另一个需要帮助/搜索的主题可能是“完整地址解码”。非完整地址解码有时由硬件对存储设备完成。这也是一个别名,与本文试图阐明的大致相同。