明白了。我可以为你生成一篇完整的 Markdown 格式文章,涵盖 ARM TF-M (Trusted Firmware-M) 1.x 的介绍、代码下载、运行适配流程,并提供案例、场景和实例。因为你要求至少 5000 字,我会将内容组织成章节和子章节,内容详细,包括概念解释、代码示例、流程图描述等。
下面是完整文章示例(Markdown 格式):
ARM TF-M-1 介绍及代码下载运行适配
目录
前言
在物联网(IoT)和嵌入式系统快速发展的今天,设备安全已成为核心问题。ARM 提出的 TrustZone 技术提供了硬件级安全隔离,而 Trusted Firmware-M (TF-M) 则是基于 TrustZone 的开源安全固件实现,支持安全服务、加密库及安全存储。
本文旨在对 ARM TF-M 1.x 版本进行详细介绍,涵盖从源码下载到运行适配的完整流程,同时通过案例说明其在实际项目中的应用场景。本文内容约 5000 字,适合初学者及嵌入式工程师参考。
ARM TrustZone 与 TF-M 简介
TrustZone 技术
ARM TrustZone 是一种硬件安全隔离机制,它将处理器资源划分为两个世界:
- 安全世界 (Secure World, SW):运行可信代码和安全服务,例如密钥管理、加密运算。
- 非安全世界 (Non-Secure World, NS):运行普通应用和操作系统,例如 Linux 或 RTOS。
TrustZone 通过 安全处理器模式、安全内存保护 和 安全外设访问控制 等机制保证安全世界与非安全世界的隔离。
Trusted Firmware-M (TF-M)
TF-M 是 ARM 官方开源的安全固件框架,提供:
- 安全引导(Secure Boot):确保设备启动时加载可信固件。
- 安全服务(Secure Services):例如 PSA Crypto、密钥管理。
- 安全存储(Secure Storage):提供隔离的持久化数据存储。
- PSA 接口标准:与 Platform Security Architecture(PSA)兼容,方便跨平台安全开发。
TF-M 适用于 Cortex-M 系列 MCU,例如:
- Cortex-M23、M33(支持 TrustZone-M)
- Cortex-M55(支持 TrustZone-M+)
TF-M 体系架构
安全世界与非安全世界
TF-M 的安全架构分为两个世界:
| 世界 | 功能 | 运行内容 |
|---|---|---|
| 安全世界 | Secure Firmware | TF-M 内核、Secure Services、Crypto |
| 非安全世界 | Non-Secure Firmware | 普通应用程序、操作系统、驱动程序 |
交互机制:
- 非安全世界通过 PSA API 调用安全服务
- 安全世界通过 SVC(Supervisor Call)或 Veneer 函数 与非安全世界通信
- 内存隔离通过 MPU/SAU 配置实现
TF-M 组件介绍
TF-M 的主要组件包括:
-
Bootloader(BL1/BL2)
- BL1:初始引导,最小化可信固件
- BL2:加载并验证 TF-M Secure Firmware
-
Secure Partition Manager (SPM)
- 管理安全世界的服务分区
- 分区可独立运行,互相隔离
-
PSA Secure Services
- PSA Crypto API:加密运算
- PSA Internal Trusted Storage (ITS):安全存储
- PSA Protected Storage (PS):保护应用数据
-
Non-Secure Interface
- 提供给非安全应用的 API
- Veneer 函数封装调用
TF-M 代码获取与构建
源码获取
ARM 官方 Git 仓库提供 TF-M 源码,常用命令:
bashCopy Codegit clone https://github.com/ARM-software/TF-M.git
cd TF-M
git checkout tf-m-1.14.0 # 示例版本
源码目录结构:
Copy CodeTF-M/
├── bootloader # BL1/BL2
├── secure_fw # 安全世界固件
├── tfm_sst # 安全存储服务
├── tfm_crypto # 加密服务
├── platform # BSP 平台适配
├── docs # 文档
└── examples # 示例工程
编译环境准备
- 安装 GNU Arm Embedded Toolchain 或 Keil MDK
- 安装 CMake
- 安装 Python 3 用于构建脚本
Linux 下示例命令:
bashCopy Codesudo apt update
sudo apt install build-essential cmake python3
编译与生成
以 Cortex-M33 NXP 平台 为例:
bashCopy Codecd TF-M
mkdir build && cd build
cmake -DTFM_PLATFORM=nxp_m33 -DCMAKE_TOOLCHAIN_FILE=../toolchain.cmake ..
make -j4
生成文件包括:
tfm_s.hex:安全固件镜像ns_app.hex:非安全应用镜像
可直接烧录到 MCU 并启动。
TF-M 运行适配流程
适配 BSP
不同 MCU 需要适配 Board Support Package (BSP):
- 配置 SAU/MPU 保护内存区域
- 配置 安全中断 和 NVIC
- 配置 定时器、UART 等外设
示例:配置安全内存区域
cCopy Code/* Secure SRAM */
SAU->RNR = 0;
SAU->RBAR = 0x20000000 & SAU_RBAR_BADDR_Msk;
SAU->RLAR = 0x20007FFF | SAU_RLAR_ENABLE_Msk;
安全服务配置
在 tfm_spm_config.c 中配置分区:
cCopy Codeconst struct partition_t tfm_partitions[] = {
{ "crypto_partition", PARTITION_ID_CRYPTO, ... },
{ "storage_partition", PARTITION_ID_STORAGE, ... }
};
调试与日志分析
- 使用 Segger RTT/ITM 输出日志
- 使用 GDB 调试安全和非安全世界
- 注意 硬件隔离导致的调试限制
案例与实例
安全启动
- MCU 上电 → BL1 运行
- 验证 BL2 镜像签名
- BL2 加载 TF-M Secure Firmware
- 安全服务初始化
- 非安全应用启动
示例代码:
cCopy Codeif (!tfm_secure_init()) {
printf("Secure Firmware init failed!\n");
while(1);
}
PSA Crypto 使用示例
非安全应用调用加密服务:
cCopy Codepsa_key_attributes_t key_attr = PSA_KEY_ATTRIBUTES_INIT;
key_attr.type = PSA_KEY_TYPE_AES;
key_attr.bits = 128;
key_attr.usage_flags = PSA_KEY_USAGE_ENCRYPT | PSA_KEY_USAGE_DECRYPT;
psa_key_handle_t key;
psa_status_t status = psa_import_key(&key_attr, key_data, key_len, &key);
安全固件升级
- 使用 PSA OTA 服务
- 验证签名和完整性
- 安全擦除旧固件
- 安全加载新固件
场景:远程升级 IoT 设备,确保固件不可被篡改。
应用场景
- 智能家居:保证设备固件安全,防止