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 在系统中的典型分层关系,包括硬件、安全固件、非安全应用以及它们之间的调用与隔离边界。
二、学习目标:从“看懂”到“能改、能调、能移植”
本课程的学习目标分为四个层次,逐层递进:
- 认知层:理解 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
五、常见误区与复盘
初学者最容易陷入三个误区。第一,把 TF-M 当成一个普通库直接链接进应用,忽略了它必须运行在安全状态并依赖 TrustZone-M 硬件隔离。第二,认为只要编译通过就万事大吉,忽视了 SAU/IDAU 配置错误会导致安全域无法启动。第三,跳过启动流程直接看服务代码,结果在调试时无法定位问题出在 BL2、SPM 还是某个分区。