如何使用ARM安全监视器呼叫(SMC)

如何使用ARM安全监视器呼叫(SMC),arm,vxworks,trust-zone,Arm,Vxworks,Trust Zone,我正在运行一个在FPGA上使用ARM Cortex处理器的操作系统。为了能够访问这块板上的这个内存区域,我需要运行一个安全的世界。有人告诉我,我需要使用一个安全的监听电话进入一个安全的世界。如果我不在一个安全的世界中,Arm可信固件会阻止我的操作系统,并给我一个信号2中断 如何使用SMC?有没有实施这一点的例子 谢谢我理解您的问题是“如何实现ARM安全监控呼叫(SMC),以便我可以从EL3上未运行的软件访问系统的特定区域”- 如果您想知道如何使用现有的SMC电话,Michael Dorgan的第

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

如何使用SMC?有没有实施这一点的例子


谢谢

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

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

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

总之,你应该:

  • 检索系统正在运行的Arm受信任固件的源代码
  • 使用IPI邮箱门铃服务示例实现您自己的一组SMC呼叫
  • 为您的平台重新编译Arm可信固件
  • 升级您的系统
  • 测试
由于您的平台使用的是ATF,因此它可能由支持。 否则,您的硅/板供应商应为您的平台提供其源代码


我希望这会有所帮助。

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

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

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

总之,你应该:

  • 检索系统正在运行的Arm受信任固件的源代码
  • 使用IPI邮箱门铃服务示例实现您自己的一组SMC呼叫
  • 为您的平台重新编译Arm可信固件
  • 升级您的系统
  • 测试
由于您的平台使用的是ATF,因此它可能由支持。 否则,您的硅/板供应商应为您的平台提供其源代码


我希望这有帮助。

这是否回答了您的问题?再看看这个。这是一个相当复杂的话题。也许可以为FPGA提供正常的访问,但这取决于总线拓扑,以及FPGA是智能从机还是由其他外围设备(如TZASC等)代理访问,这是否回答了您的问题?再看看这个。这是一个相当复杂的话题。也许可以为FPGA提供正常的访问,但这取决于总线拓扑以及FPGA是智能从机还是由其他外围设备(如TZASC等)代理的访问。非常感谢您的回答。你能再解释一下ZynqMP IPI邮箱的功能吗?有没有参考资料可以帮助我分析这个问题?我需要在EL0上运行的东西,以访问只有在EL3中才能访问的内存区域。SMC在EL0或EL3中被呼叫吗?谢谢,我不知道ZynqMP IPI邮箱的确切用途,但您可以参考ZyngMP参考手册。这是一场精彩的演讲。这连同ZynqMP IPI邮箱代码和ZynqMP文档应该足够了。SMC服务在调用后将在EL3上运行。同样,我建议您阅读Linaro演示文稿。您使用的确切处理器是什么?我使用的是ARM Cortex A53,主板是Xilinx MPSoc Ultrascale+ZCU102。我运行的操作系统是VxWorks。如果我正在运行一个应用程序,并且我想访问这个内存区域,我在我的EL0代码中使用一个SMC,这样我的应用程序就可以访问EL3,然后我就可以访问这个内存区域了,对吗?读/写之后,我的应用程序如何返回EL0?再次感谢Frant,这是一个很大的帮助。代码必须至少运行EL1才能使用指令。我不知道哪个EL VxWorks在运行,但在Linux下,您将编写一个驱动程序(Linux在EL1上运行),该驱动程序将能够使用SMC指令调用您的自定义SMC处理程序。用户程序(在EL0上运行)可以使用驱动程序的IOCTL通过驱动程序访问服务。您可能应该参考您的VxWorks文档。我在EL0上运行的代码调用驱动程序(EL1),必须调用ATF中定义的SMC处理程序。正确吗?我在ATF源代码中看到了很多SMC处理程序。非常感谢您的回答。你能再解释一下ZynqMP IPI邮箱的功能吗?有没有参考资料可以帮助我分析这个问题?我需要在EL0上运行的东西,以访问只有在EL3中才能访问的内存区域。SMC在EL0或EL3中被呼叫吗?谢谢,我不知道ZynqMP IPI邮箱的确切用途,但您可以参考ZyngMP参考手册。这是一场精彩的演讲。这连同ZynqMP IPI邮箱代码和ZynqMP文档应该足够了。SMC服务在调用后将在EL3上运行。同样,我建议您阅读Linaro演示文稿。您使用的确切处理器是什么?我使用的是ARM Cortex A53,主板是Xilinx MPSoc Ultrascale+ZCU102。我运行的操作系统是VxWork