• 资料介绍
    • 引言
    • CM33 内核的安全扩展
    • 内核的 SAU 与 IDAU
    • 资源的安全属性及其配置
    • CPU 访问资源的安全规则
    • TrustZone Memory 安全配置常见问题及分析方法
    • 小结
  • 资料预览
  • 相关推荐
申请入驻 产业图谱

STM32 TrustZone 开发调试技巧(1)—— 地址安全区及资源安全属性配置

03/24 14:20
534
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

STM32 TrustZone 开发调试技巧(1)—— 地址安全区及资源安全属性配置

2.33 MB

引言

STM32 MCU 中较新的产品系列例如 STM32L5、STM32U5 采用了 ARM Cortex V8M 的CM33 内核,并引入了 TrustZone 概念。在此基础上,从内核到存储器再到外设等设计了完整的支持 TrustZone 架构的系统隔离机制。

在新的 TrustZone 架构下,软件的开发由原来的单一工程,变成了 Secure 安全和NonSecure 非安全两个工程的联合开发,系统上电首先从 Secure 工程开始运行,完成必要初始化之后跳转至 NonSecure 工程运行,之后 NonSecure 工程还可以通过调用 Secure 工程经由 NSC(Secure NonSecure Callable)区提供的 API 调用 Secure 工程的函数。由于此时系统的所有资源,包括 Memory、外设等等都区分了安全和非安全属性,而CPU 也区分安全和非安全运行状态,其对应的安全或非安全代码及其使用的数据都需要有相应的存储空间存放,且该存储空间需要具有相同的安全或者非安全属性,否则代码无法正常运行。因此,在 TrustZone 架构下首先需要针对不同物理区间做地址安排及相应安全属性的正确配置。对于 V8M 内核来说,这涉及到 SAU/IDAU 的配置,且取指令与取数据可能有不同的访问规则,同时指令以及数据是否能够从 memory 中正确取得,除了和 SAU/IDAU 的配置有关以外,还与 Memory 自身的安全属性配置有关。

本文将对 SAU/IDAU 配置,Memory 的自身安全属性配置,以及内核访问指令与数据时的安全访问规则加以阐述,希望可以帮助相关开发者更好地理解 V8M TrustZone 的架构以及在 STM32 中的实现,同时,还会列举一些与 memory 的 TrustZone 安全配置相关的常见问题及分析方法,给开发者做参考。

CM33 内核的安全扩展

CM33 内核使用 AHB5 总线,具有可选安全扩展(Security Extension)功能。使能安全扩展的内核则支持 V8M TrustZone 架构,此时 AHB5 总线上将携带安全访问标记信号(HNONSEC),这个标记将指示当前访问的 Transaction 是安全访问还是非安全访问,总线上的从设备需要识别这个标记信号,根据 Transaction 携带的安全、非安全权限信息,决定是

否允许最终的物理访问。

内核的安全扩展除了总线携带的安全标记信号以外,还包括 CPU 本身的安全/非安全运行状态,有对应安全/非安全状态的 CPU 寄存器(例如各自的 stack pointer MSP 和PSP),中断等等。

内核的 SAU 与 IDAU

SAU 是 CM33 内核的单元,负责内核对地址的安全访问控制。IDAU 同样作为内核安全访问控制的一部分,与 SAU 共同作用,只不过 IDAU 是芯片厂商实现的独立接口,其行为由芯片厂商的设计决定。

资源的安全属性及其配置

片上 Flash

Flash 控制器属于 TZ aware 外设,直接支持 AHB5 总线,能够识别总线上面携带的HNONSEC 信号(标记是否为 Secure 访问),Flash 控制器自身有相关寄存器用于配置Flash 区域的 S 安全与 NS 非安全属性。具有 S 安全访问属性的 Flash 区域只能接受安全访问(即 Transaction 的 HNONSEC=0),具有 NS 非安全访问属性的 Flash 区域只能接受非安全访问(即 Transaction 的 HNONSEC=1)。这里注意不要将安全/非安全访问与 CPU 的安全/非安全状态混为一谈。这二者未必是一致的,后面讲 CPU 运行状态与访问规则的时候会进行解释。

CPU 访问资源的安全规则

CPU 对资源访问的一般规则

CPU 的运行分为安全和非安全两种状态,CPU 处于哪种状态取决于当前 PC 的指令来自于安全地址还是非安全地址。简单地说,如果 CPU 执行的指令来自安全地址(以 SAU/IDAU 角度看),则 CPU 正在执行安全代码,处于安全状态;当 CPU 执行的指令来自于非安全地址(同样从 SAU/IDAU 角度看),则 CPU 正在执行非安全代码,处于非安全状态。

TrustZone Memory 安全配置常见问题及分析方法

小结

本文简单介绍了 ARM CM33 内核 TrustZone 架构下内核中 SAU/IDAU 如何区分安全非安全地址,存储器以及外设资源如何设置自身的安全访问属性,以及 CPU 访问不同资源时的访问规则等内容。最后列举了一些使用 STM32 进行 V8M TZ 开发中常见的 memory 配置相关的问题以及调试方法,希望对广大开发者有所帮助。

在后续的篇章中,我们还将总结一些其他的 TrustZone 开发中的常见问题及调试技巧,欢迎读者继续关注。

资料预览

点赞
收藏
评论
分享
加入交流群
举报

相关推荐

方案定制

去合作
方案开发定制化,2000+方案商即时响应!