在ARMv8-M上使用embOS

浏览:135来源:本站时间:2023-09-22

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

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

https://www.segger.com/downloads/embos/embOS_CortexM_EmbeddedStudio_Trial


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

要在embOS中使用Arm TrustZone,首先打开工作区:\ start \BoardSupport\NXP\LPC55S69_LPCXpresso55S69_TrustZone\Start_LPC55S69.emProject。

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

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

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

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

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

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

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

图片

构建安全工程Start_LPC55S69_s,


图片

构建非安全工程Start_LPC55S69_ns,


图片

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


图片

在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需位于安全内存中。

图片


总结

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

京ICP备:京ICP备05011254号-1 版权归北京麦克泰软件技术有限公司所有
北京麦克泰软件技术有限公司