ARM Cortex-M TrustZone与MPU隔离方案对比及相关技术咨询
ARM Cortex-M TrustZone 相关问题解答
1. TrustZone 对比 MPU+SVC 方案的优势
- 硬件强制隔离边界:TrustZone 通过硬件 NS 位划分安全/非安全状态,非安全侧无法直接访问安全侧内存、外设或寄存器,彻底避免了 MPU 方案中软件配置错误、恶意篡改 MPU 寄存器的风险。
- 简化权限管理:无需频繁修改 MPU 配置切换资源访问权限,安全/非安全侧的资源边界由硬件固化,减少软件层面的权限维护复杂度,降低人为失误概率。
- 核心寄存器独立保护:SysTick、SVC、SVCPend 等核心寄存器采用 banked 设计,安全侧与非安全侧的这些资源完全独立,不会互相干扰;而 MPU 方案下这类寄存器全局共享,需要额外软件逻辑防止非安全侧篡改。
- 高效外设隔离:TrustZone 可通过外设的 NS 属性直接控制访问权限,无需通过 MPU 配置内存映射限制外设访问,对硬件外设的隔离更直接可靠。
2. 安全/非安全侧的常见分区方式
遵循最小化安全侧代码原则,常见分区逻辑如下:
- 按资源敏感度划分
- 安全侧:遗留核心业务代码、密钥/加密算法模块、敏感外设(加密芯片、安全存储、生物识别传感器)、安全配置寄存器等涉及敏感数据或高权限操作的资源。
- 非安全侧:第三方应用、UI 交互逻辑、普通外设(UART、LCD、通用 GPIO)、非敏感数据存储等无安全风险的功能模块。
- 按功能边界划分
安全侧仅保留核心安全服务(如身份认证、数据加密、硬件资源访问 API),非安全侧负责所有非敏感业务逻辑与用户交互,非安全侧通过标准化安全 API 调用安全侧服务实现跨侧交互。
3. 安全/非安全侧同时运行线程的实现方案
目前主流有两种方案,其中双 OS 实例方案更成熟可靠:
双 OS 实例方案
- 利用 Cortex-M 的 banked 寄存器特性,安全侧与非安全侧各自运行独立的 OS 实例(比如两侧都用 FreeRTOS)。
- 调度机制:安全侧 OS 拥有最高权限,CPU 默认处于安全状态;需运行非安全侧线程时,安全侧通过硬件指令切换到非安全状态,由非安全侧 OS 调度执行;当发生安全中断、SVC 调用或非安全侧触发安全请求时,CPU 切回安全状态,由安全侧 OS 调度。两个 OS 调度逻辑独立,但安全侧可随时抢占非安全侧执行。
- 需实现跨侧上下文切换逻辑与通信机制(比如共享内存+同步信号量、专用安全 API 调用),确保两侧线程安全交互。
单 OS 调度器方案
- 仅在安全侧运行一个 OS,非安全侧线程由该 OS 统一管理,OS 通过专门 API 启动非安全线程,并在调度时切换 CPU 安全状态执行不同线程。
- 缺点:调度逻辑复杂度高,需要 OS 支持安全状态的线程标记,且非安全侧线程运行完全依赖安全侧 OS,灵活性不足,一旦安全侧 OS 出问题,非安全侧业务也会受影响。
内容的提问来源于stack exchange,提问作者ted
相关产品推荐
相关产品推荐

