查看: 1520|回复: 7

[分享] 在LPC55Sxx系列微控制器上使用 FreeRTOS 并支持TrustZone

[复制链接]
  • TA的每日心情
    开心
    2024-3-26 15:16
  • 签到天数: 266 天

    [LV.8]以坛为家I

    3299

    主题

    6546

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    32023
    最后登录
    2024-4-25
    发表于 2022-4-12 16:11:38 | 显示全部楼层 |阅读模式
    在LPC55Sxx系列微控制器上使用 FreeRTOS并支持TrustZone
    1 简介
    LPC55Sxx 系列 MCU 是一款基于 Arm® Cortex®- M33 内核的微控制器,使用了支持TrustZone的ARMv8-M 架构。LPC55S69是高性能MCU之一,包括两个Cortex-M33内核,CPU0支持TrustZone-M的安全扩展。FreeRTOS 是一个轻量级的嵌入式操作系统;具有代码开源、可移植、可裁剪、调度策略灵活等特点;可方便地移植到各种嵌入式控制器中,已被广泛应用于各种嵌入式产品中。
    本文以LPC55S69为例,介绍如何在支持 TrustZone 的 ARMv8-M 处理器中使用FreeRTOS。


    2 TrustZone技术特点
    TrustZone 技术具有以下特点:
    • 允许用户将内存映射划分为安全和非安全区域。
    • 阻止未经授权的对安全区的代码/数据的调试访问。
    4 FreeRTOS 中TrustZone 的使用.....4
    4.1 在 SDK v2.8 中使用 TrustZone 的
    FreeRTOS...................................5
    4.2 更安全的 FreeRTOS 使用方式 ..11
    5 参考资料 ..................................... 12
    • CPU 包括安全属性单元(SAU)和双份的(安全和非安全)的 NVIC、MPU、SYSTICK、核心控制寄存器等。安全/非安全代码可以访问自己分配的资源。
    • 堆栈管理从原来的 Cortex-M 内核的主堆栈指针(MSP)和进程堆栈指针(PSP)两个寄存器扩展成4 个寄存器,来支持安全和非安全。
    • 引入安全网关操作码的概念,非安全代码通过一套严格定义好的安全入口切如安全代码。
    TrustZone 技术直接满足嵌入式系统的以下一些安全要求。
    • 数据保护
    敏感数据存储在安全存储空间中,只能由安全软件访问。只有经过安全检查或认证后,非安全软件才能访问调用为非安全域提供服务的安全API。
    • 固件保护
    预加载的固件存储在安全内存中,以防止它被逆向工程、破坏或恶意攻击。ARMv8-M 的 TrustZone 技术可以与额外的安全保护技术配合使用。例如,设备级读出保护是当今行业中常用的一种技术,可与 TrustZone 技术一起用于ARMv8-M 控制器来保护最终产品的固件。
    • 操作保护
    核心软件可以作为安全固件预加载,并且相应的外围设备可以配置为仅允许从安全状态下进行访问。通过这种方式,可以保护操作免受来自非安全端的入侵。
    • 安全启动机制

    安全启动机制可增强平台的安全性、保密性,因为它始终从安全内存启动。


    3 安全环境配置
    本节介绍如何配置安全环境,使用 TrustZone 技术保护系统重要资源。LPC55S69提供两级保护:CPU 级保护和系统级保护。

    TrustZone 位于 CPU0 内部,属于 CPU 级保护。此外,LPC55S69使用安全的 AHB 控制器提供一层系统级保护,如图 1所示。
    11.png
    LPC55S69 安全环境的配置包括 TrustZone 的配置和 Secure AHB 控制器的配置两部分。TrustZone 的配置主要是 SAU 的配置。
    3.1 TEE工具
    安全环境的配置可以通过手动配置相应的寄存器来实现,也可以使用恩智浦的可信执行环境(TEE)工具来实现。建议开发者使用 TEE 工具快速实现 TrustZone 和安全 AHB 控制器的配置。图 2是 TEE 工具的 GUI 界面。
    12.png
    有关使用 TEE 工具的详细信息,请参阅 MCUXpresso 配置工具(桌面)用户指南(文档GSMCUXCTUG)。
    3.2 安全/非安全状态切换
    配置完 LPC55S69 的安全环境后,用户可以在实际项目中使用一些特殊的功能在安全和非安全状态之间进行切换。这里有两个特殊函数:非安全可调用函数(NSC function/Entry function)和非安全函数(Non-secure function)。
    • 非安全可调用函数(NSC)
    NSC 函数是可以被非安全函数调用的安全函数。NSC 函数需要使用attribute ((cmse_nonsecure_entry))属性来定义。

    示例如下。
    1. attribute ((cmse_nonsecure_entry)) void vToggleGreenLED(void)
    2. {
    3. /* Toggle the on-board green LED. */
    4. GPIO_PortToggle(GPIO, LED_PORT, (1U << GREEN_LED_PIN));
    5. }
    复制代码
    非安全函数
    非安全函数是可以被安全函数调用的函数。非安全函数需要使用attribute_((cmse_nonsecure_call))属性来定义。示例
    如下。

    1. Typedef void _attribute_((cmse_nonsecure_call)) nsfunc(void);
    2. Nsfunc *FunctionPointer;
    3. FunctionPointer = cmse_nsfptr_create((nsfunc *) (0x21000248u));
    4. If (cmse_is_nsfptr(FunctionPointer))
    5. FunctionPointer();
    复制代码
    注意
    非安全函数必须通过函数指针的方式调用。
    更多关于安全/非安全状态切换的信息,请参阅有关 ARMv8-M 架构的 TrustZone 技术的文档。
    4 FreeRTOS 中 TrustZone 的使用
    本节介绍如何在 LPC55S69 中运行 FreeRTOS 并启用TrustZone。FreeRTOS 官方提供了在LPC55S69 上支持Trustzone 运行的
    FreeRTOS 示例。FreeRTOS 可以从 FreeRTOS 下载。LPC55S69 示例的路径为
    FreeRTOS/Demo/CORTEX_MPU_M33F_NXP_LPC55S69_MCUXpresso,如图 3所示。


    13.png

    FreeRTOS 提供此演示的文档, 他们可以从RTOS下载。
    NXP 的 LPC55S69 SDK 包也提供了一个支持 TrustZone 的 FreeRTOS 工程示例。项目名称为freertos_tzm,示例路径为
    /SDK_2.8.2_LPCXpresso55S69_IAR/boards/lpcxpresso55s69/rtos_examples/freertos_tzm。freertos_tzm 项目如图 4所示。

    14.png

    4.1 SDK v2.8 中使用 TrustZone 的 FreeRTOS 示例
    本节以 SDK v2.8 中的 freertos_tzm 项目为例,介绍 FreeRTOS 支持 TrustZone 的工作流程。freertos_tzm 示例的工作流程如图 5所示。

    15.png

    本项目的内存分区如图 6所示。

    16.png

    用户可以将一些重要的资源存储在一个安全的区域。FreeRTOS 内核存储在非安全区域,任务创建和调度过程也在非安全区域完成。这些非安全任务可以通过调用 NSC 函数来访问安全区域中的某些特定资源,安全函数可以调用非安全函数跳转到非安全区域。
    4.1.1 创建用户任务
    在 freertos_tzm 示例中,创建了两个用户任务,如图 7所示。

    17.png

    当用户使用xTaskCreate()函数在非安全区域创建任务时,会分配一个非安全任务栈。当任务切换时,非安全context可以存储
    在非安全任务堆栈中。
    4.1.1.1 分配安全堆栈
    由于 TrustZone 技术将系统内存划分为安全区域和非安全区域,因此在执行非安全任务时可以调用NSC 函数。因此,还需要为
    调用 NSC 函数的非安全任务分配一个安全堆栈来存储安全上下文(context)。安全栈的分配在第一次执行非安全任务时完成,
    如图 8所示。
    18.png


    完整版查看请回复



    签到签到
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    昨天 21:34
  • 签到天数: 1209 天

    [LV.10]以坛为家III

    22

    主题

    4759

    帖子

    0

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    8076

    活跃会员

    最后登录
    2024-4-25
    发表于 2022-4-12 17:11:50 来自手机 | 显示全部楼层
    前排支持,谢谢分享
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-10 22:38
  • 签到天数: 1335 天

    [LV.10]以坛为家III

    88

    主题

    4292

    帖子

    12

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    9049
    最后登录
    2024-4-13
    发表于 2022-4-12 17:49:40 | 显示全部楼层
    前些天也在使用一款Cortex-M33内核的MCU
    也在想是在安全区使用FreeRTOS,还是在非安全区使用FreeRTOS?
    想来想去,也没有想出来个所以然
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    4 小时前
  • 签到天数: 1278 天

    [LV.10]以坛为家III

    21

    主题

    1万

    帖子

    1

    金牌会员

    Rank: 6Rank: 6

    积分
    13239
    最后登录
    2024-4-25
    发表于 2022-4-12 22:15:11 | 显示全部楼层
    FreeRTOS,还没在NXP的板子上试过,必须要体验下,尤其是支持的TrustZone技术。

    点评

    我最近在LPC54608的板子上使用FreeRTOS,不过TrustZone还没怎么用,毕竟M3不支持该项技术。  发表于 2022-4-13 22:45
    跟着日天混 ,三天饱九顿!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    5 分钟前
  • 签到天数: 594 天

    [LV.9]以坛为家II

    51

    主题

    2220

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    7043
    最后登录
    2024-4-25
    发表于 2022-4-13 10:08:10 | 显示全部楼层
    牛气,感谢分享
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-3-5 08:47
  • 签到天数: 1 天

    [LV.1]初来乍到

    91

    主题

    2927

    帖子

    2

    金牌会员

    Rank: 6Rank: 6

    积分
    7806
    最后登录
    2024-4-25
    发表于 2022-4-13 16:07:48 | 显示全部楼层
    移植FreeRtos还是比较方便的,Trustzone现在用的越来越多了。必须得实践才行。

    点评

    嗯,确实上手很容易,简单到都不能叫移植了,几乎没啥配置,感觉像是直接拉模板。  发表于 2022-4-13 22:46
    加油哦
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-25 13:30 , Processed in 0.156142 second(s), 28 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表