【问题标题】:How to use an ARM Secure Monitor Call (SMC)如何使用 ARM 安全监视器调用 (SMC)
【发布时间】:2019-12-06 17:38:35
【问题描述】:

我正在运行一个在 FPGA 上使用 ARM Cortex 处理器的操作系统。为了能够访问这块板上的内存区域,我需要运行一个安全的世界。有人告诉我,我需要使用 Secure Monitor 调用才能进入一个安全的世界。如果我不在一个安全的世界中,Arm Trusted Firmware 会阻止我的操作系统,并给我一个信号 2 中断。

如何使用 SMC?有没有实现这个的例子?

谢谢

【问题讨论】:

标签: arm vxworks trust-zone


【解决方案1】:

我将您的问题理解为“如何实现 ARM 安全监视器调用 (SMC),以便我可以从未在 EL3 上运行的软件访问系统的特定区域” - 如果您想知道如何使用现有的 SMC 呼叫,Michael Dorgan 的第一条评论已经回答了您。

如果没有,您需要在系统启动时执行的在 EL3 上运行的软件中实现您自己的 SMC 调用。在典型的 Aarch64 系统中,Arm Trusted Firmware 的 BL31 部分将负责此操作,而 ATF 似乎是您的系统正在运行的。

一个实现示例是位于here 的 ZynqMP IPI 邮箱门铃服务的 SMC 处理程序。

底线,你应该:

  • 检索您的系统正在运行的 Arm 可信固件的源代码,
  • 使用例如 IPI 邮箱门铃服务示例实现您自己的一组 SMC 呼叫,
  • 为您的平台重新编译 Arm 可信固件,
  • 升级您的系统,
  • 测试。

由于您的平台使用的是 ATF,因此this code 可能会支持它。 否则,您的芯片/电路板供应商应为您的平台提供其源代码。

我希望这会有所帮助。

【讨论】:

  • 非常感谢您的回答。您能详细解释一下 ZynqMP IPI 邮箱的作用吗?有什么参考资料可以帮助我解析这个吗?我需要在 EL0 上运行的东西来访问只有在 EL3 中才能访问的内存区域。 SMC 是否在 EL0 或 EL3 中调用?谢谢
  • 我不知道ZynqMP IPI邮箱到底是干什么用的,不过可以参考ZyngMP参考手册。 Trusted Firmware Deep Dive 是一个出色的演示文稿。这连同 ZynqMP IPI 邮箱代码和 ZynqMP 文档就足够了。SMC 服务一旦被调用就会在 EL3 上运行。同样,我建议您阅读 Linaro 演示文稿。您正在使用的确切处理器是什么?
  • 我用的是ARM Cortex A53,板子是Xilinx MPSoc Ultrascale + ZCU102。我正在运行的操作系统是 VxWorks。如果我正在运行一个应用程序,并且我想访问这个内存区域,我在我的 EL0 代码中使用了一个 SMC,然后我的应用程序变成了 EL3,然后我可以访问这个内存区域是否正确?在我读/写之后,我的应用程序如何回到 EL0?再次感谢弗兰特,这是一个很大的帮助。
  • 代码必须至少在 EL1 运行才能使用SMC 指令。我不知道在哪个 EL VxWorks 上运行,但是在 Linux 下,您将编写一个驱动程序(Linux 在 EL1 上运行),它能够使用 SMC 指令来调用您的自定义 SMC 处理程序。用户程序(在 EL0 上运行)可以使用驱动程序的 IOCTL 通过驱动程序访问服务。您可能应该参考您的 VxWorks 文档。
  • 我在 EL0 上运行的代码调用驱动程序 (EL1),必须调用 ATF 中定义的 SMC 处理程序对吗?我在 ATF 源代码中看到了一堆 SMC 处理程序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-25
  • 2017-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多