embOS如何支持Arm TrustZone

嵌入式技术

1372人已加入

描述

通过ARMv8-M架构支持的TrustZone技术,可以将关键安全固件和私有程序(如安全引导、固件更新和密钥)与其余应用程序隔离,极大降低被攻击的可能性,增加嵌入式系统安全。SEGGER的embOS目前已支持ARMv8-M TrustZone,这使得embOS成为高效、安全的嵌入式系统的良好基础。

embOS Cortex-M 提供了基于Embedded Studio的NXP LPC55S69 (NXP LPCXpresso55S69)TrustZone演示项目,其中embOS完全在非安全状态下运行,但任务可以调用安全状态的函数。

我们基于该例程了解一下embOS如何支持Arm TrustZone。

要在embOS中使用Arm TrustZone,首先打开工作区: start BoardSupportNXPLPC55S69_LPCXpresso55S69_TrustZoneStart_LPC55S69.emProject。

打开后,工作区中将包含两个独立的工程: 

1、在安全状态下运行的应用Start_LPC55S69_s。

2、在非安全状态下运行的非安全应用Start_LPC55S59_ns。

安全项目用于准备和启动设备。非安全应用演示如何使用TrustZone实现应用。

ARMv8-M内核启动时处于安全状态。这意味着复位后将运行安全应用程序,初始化安全属性单元(SAU),然后启动非安全应用。安全应用程序还包括从非安全状态读写安全寄存器的函数。

非安全应用程序使用embOS来调度任务。这意味着本示例中的embOS在非安全状态运行。由embOS创建的任务仍然可以使用安全状态的函数。

非安全示例应用程序创建了两个任务。每个任务控制一个LED。HPTask()调用安全状态函数IncrementCounter_s(),该函数只是递增安全计数器Counter_s。

ARMv8

构建安全工程Start_LPC55S69_s,

ARMv8

构建非安全工程Start_LPC55S69_ns,

ARMv8

启动安全项目Start_LPC55S69_s的调试。当应用程序运行时,两个LED将开始闪烁。安全应用设置SAU,初始化非安全堆栈指针并调用非安全复位处理程序。

ARMv8

在HPTask()中设置一个断点。HPTask()调用安全函数IncrementCounter_s(),递增安全计数器Counter_s,同时递增非安全计数器Counter_ns。通过OS_ARM_TZ_SetTaskContextExtension(&Arm_TZ_ApiList, StackHP_s, sizeof(StackHP_s)) 扩展任务上下文。HPTask()需要在安全状态下使用独立的任务堆栈。TrustZone任务上下文扩展控制安全寄存器PSP_s和PSPLIM_s。安全任务堆栈StackHP_s需位于安全内存中。

ARMv8

总结

PART

last

通过运行这个示例项目,可以清楚地看到,embOS可以在非安全状态下运行,而应用程序可以轻松访问位于安全状态下的受信任的软件。被访问的软件可能包含加密功能,安全引导等。这是最常见的场景, embOS也能够在安全状态下运行。

  审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分