问题标签 [trust-zone]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
31 浏览

arm - Cortex-M33 MTB 配置 - 当 MTB 缓冲区已满时

我正在探索 Cortex-M 硬件上的 MTB 功能,并使用 Cortex-m33 映像在 Arm mps2+ FPGA 板上进行实验,从而启用 TrustZone 技术。据我所知,MTB 可以配置为记录执行的非顺序分支。记录将由 MTB 单元自动直接写入分配的 SRAM。在实验过程中,我有几个问题。

  1. 当 MTB 缓冲区已满时,有两种处理方式。一种方法是从一开始就重写缓冲区。另一种方法是设置水印,让PE进入调试状态。我检查了调试状态意味着我们需要外部调试器或另一个内核来处理的文档。由于我使用的板是单核的并且我不喜欢使用外部调试器,是否有另一种方法可以在 MTB 缓冲区已满时通知 CPU 而不会停止它?
  2. 基于第一个问题,我进行了几次试验:
  • 我配置了 DWT 比较器来监控数据地址写入,但 DWT 似乎无法像 MTB 那样监控硬件写入。
  • 我配置了非安全 MPU 将 MTB 缓冲区设置为 RO,但仍然无法触发安全故障。我检查了文件ARM CoreSight MTB-M33 page A2-26: The MTB-M33 ensures that trace write accesses have priority over AHB accesses。这就是 MPU 不能约束 MTB 写入的原因吗?
  • 我还配置了 SAU 以将 MTB 缓冲区设置为安全,当发生非安全跟踪写入时,它仍然无法触发安全故障。
  • 然后我回去阅读 MTB 文档。MTB 实际上有 MTB_SECURE 寄存器,可以将 MTB 缓冲区划分为安全或非安全。但我不知道是因为我使用的板子或图像没有完全实现MTB,所以我不能修改MTB_SECURE寄存器,除了最后两位。

那么最后,当 MTB 缓冲区已满时,是否有另一种方法可以通知 CPU 而不会停止它?就像英特尔处理器跟踪所做的那样,它将产生一个中断。

我希望我能清楚地描述这个问题,如果有人能给我任何建议,我将不胜感激。太感谢了!

0 投票
1 回答
71 浏览

c - ARM TrustZone:从安全监视器运行时服务访问非安全缓冲区

我的设置包含一个 STM32MP157C-DK2,它使用 Trusted Firmware-A 将 SP-MIN 加载为 BL32,将 uBoot+Linux 加载为 BL33。

我试图让一个小例子工作,我从 Linux 内核创建一个 SMC,它传递对非安全内存的引用。该位置的数据应由处理 SMC 的运行时服务更改。

我面临的问题是,我找不到任何有关将虚拟地址从 NS:EL1 的 Linux 内核转换为 EL3 的转换机制所需的步骤的任何信息。

我的运行时服务的代码如下所示:

SMC 可以毫无问题地到达处理程序,但是一旦我尝试取消引用我通过 x1 传递的物理地址,CPU(显然)就会崩溃。如果有人可以帮助我填写剩余的必需步骤以获得有效的参考,那将不胜感激。