1. 课程导入

在嵌入式安全逐渐从“可选项”变成“必选项”的今天,如何在一个资源受限的 MCU 上构建可信执行环境,是许多固件工程师必须面对的问题。Trusted Firmware-M(简称 TF-M)正是为解决这一问题而生的开源参考实现。它由 Arm 主导维护,是 Platform Security Architecture(PSA)在固件层面的落地载体,目标是在 Cortex-M 系列处理器上提供一套标准化、可移植、可认证的安全固件框架。

本课程面向已经具备一定嵌入式 C 语言、编译链接与启动流程基础的工程师,通过 30 个章节,从概念、架构、组件、配置、移植到调试与认证,系统性地建立 TF-M 工程能力。本章作为导入,先回答三个问题:TF-M 在系统中处于什么位置?我们要学什么?以及按什么顺序学?

一、TF-M 的定位:MCU 上的可信根与安全服务中枢

要理解 TF-M 的定位,最直观的方式是看它在整个系统软件栈中的位置。TF-M 运行在安全域,向下直接管理安全硬件资源,向上为应用固件提供标准化的安全服务接口。它既不是操作系统,也不是单纯的加密库,而是一个“安全固件框架”。

从信任链角度看,芯片上电后由不可变的 Boot ROM 或安全启动代码验证并加载 TF-M,TF-M 再验证非安全应用。这样,TF-M 成为运行时可信根(Root of Trust)的承载者。从服务角度看,TF-M 通过 PSA Certified Secure Services 提供安全存储、加解密、密钥管理、认证、审计日志等能力,非安全应用通过 PSA Client API 调用这些服务,无需关心底层实现。

核心定位一句话:TF-M 是 Cortex-M 平台上实现 PSA 安全模型的参考固件,是连接安全硬件与非安全应用的“可信中间层”。

下图展示了 TF-M 在系统中的典型分层关系,包括硬件、安全固件、非安全应用以及它们之间的调用与隔离边界。

TF-M 在 MCU 系统中的分层定位 非安全应用域(Non-Secure) RTOS / 裸机应用 · PSA Client API 调用 · 业务逻辑 通过 SVC / PSA IPC 进入安全服务 安全域(Secure)— Trusted Firmware-M SPM 安全分区管理 调度 · 隔离 · IPC 安全服务分区 存储 · 加密 · 密钥 · 认证 安全启动与可信根 BL2 · 镜像验证 · 回滚保护 PSA Secure Services · 安全分区隔离 · 硬件抽象层 运行于 TrustZone-M 安全状态,拥有独立栈与内存 硬件平台(Cortex-M + TrustZone-M) SAU / IDAU 安全属性配置 · MPU 内存保护 · NVIC 中断隔离 Crypto 加速器 · 安全存储介质 · 真随机数发生器 · 调试认证 PSA IPC / SVC 寄存器 / 中断 / 内存映射

二、学习目标:从“看懂”到“能改、能调、能移植”

本课程的学习目标分为四个层次,逐层递进:

  • 认知层:理解 PSA 安全模型、TrustZone-M 隔离机制以及 TF-M 的整体架构与启动流程。
  • 使用层:能够基于官方仓库完成构建、配置、烧录,并运行自带测试用例。
  • 开发层:能够编写自定义安全分区、接入 PSA API、配置安全存储与密钥管理。
  • 移植层:能够将 TF-M 适配到新的 MCU 或开发板,完成平台移植与调试。

这四个层次对应不同的工程角色:系统架构师关注认知层,应用工程师关注使用层与开发层,BSP 与芯片原厂工程师则必须掌握移植层。

三、整体知识框架:五大模块

TF-M 的知识体系可以归纳为五个模块,它们既相对独立,又通过构建系统与配置系统相互关联。

模块 核心内容 关键产出
架构与安全模型 PSA、TrustZone-M、安全分区、隔离边界 能画出系统分层与信任链
构建与配置 CMake、Kconfig、平台配置、编译选项 能独立完成一次完整构建
安全服务 安全存储、加密、密钥、认证、审计 能调用并集成 PSA API
安全启动 BL2、镜像签名、验证、回滚保护 能配置并验证安全启动链
移植与调试 平台适配、日志、故障定位、认证测试 能在新板卡上跑通 TF-M

四、学习路径与典型场景

建议的学习路径遵循“先跑通、再拆解、后改造”的原则。第一步,在官方支持的开发板(如 STM32L562E-DK、Musca-B1)上完成一次构建与烧录,观察启动日志;第二步,阅读启动流程与分区调度代码,理解安全域如何接管;第三步,修改配置或新增一个安全分区,验证自己的理解;第四步,尝试移植到自定义板卡。

一个典型场景是:某物联网设备需要在 MCU 上实现安全密钥存储与固件升级校验。工程师需要配置 TF-M 的安全存储分区、启用加密服务、配置 BL2 镜像验证,并在非安全应用中通过 PSA API 读写密钥。这正是本课程后续章节要逐步展开的内容。

# 典型构建命令示例(以官方支持的平台为例)
cmake -S . -B build -DTFM_PLATFORM=stm32l562e_dk \
      -DTFM_TOOLCHAIN_FILE=toolchain_GNUARM.cmake \
      -DCMAKE_BUILD_TYPE=Release
cmake --build build -- install
建议在开始后续章节前,先准备好一台 Linux 开发环境、GNU Arm 工具链以及一块支持 TrustZone-M 的开发板。没有硬件时,也可以先使用 QEMU 或 FVP 模拟器完成部分实验。

五、常见误区与复盘

初学者最容易陷入三个误区。第一,把 TF-M 当成一个普通库直接链接进应用,忽略了它必须运行在安全状态并依赖 TrustZone-M 硬件隔离。第二,认为只要编译通过就万事大吉,忽视了 SAU/IDAU 配置错误会导致安全域无法启动。第三,跳过启动流程直接看服务代码,结果在调试时无法定位问题出在 BL2、SPM 还是某个分区。

复盘建议:每学完一个模块,都回到“信任链”和“隔离边界”这两个主线问题上。凡是无法用这两条主线解释的现象,通常说明对架构的理解还有缺口。