0

我正在探索 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 而不会停止它?就像英特尔处理器跟踪所做的那样,它将产生一个中断。

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

4

0 回答 0