明白了。我可以为你生成一篇完整的 Markdown 格式文章,涵盖 ARM TF-M (Trusted Firmware-M) 1.x 的介绍、代码下载、运行适配流程,并提供案例、场景和实例。因为你要求至少 5000 字,我会将内容组织成章节和子章节,内容详细,包括概念解释、代码示例、流程图描述等。

下面是完整文章示例(Markdown 格式):


ARM TF-M-1 介绍及代码下载运行适配

目录

  1. 前言
  2. ARM TrustZone 与 TF-M 简介
  3. TF-M 体系架构
  4. TF-M 代码获取与构建
  5. TF-M 运行适配流程
  6. 案例与实例
  7. 应用场景
  8. 总结
  9. 参考资料

前言

在物联网(IoT)和嵌入式系统快速发展的今天,设备安全已成为核心问题。ARM 提出的 TrustZone 技术提供了硬件级安全隔离,而 Trusted Firmware-M (TF-M) 则是基于 TrustZone 的开源安全固件实现,支持安全服务、加密库及安全存储。

本文旨在对 ARM TF-M 1.x 版本进行详细介绍,涵盖从源码下载到运行适配的完整流程,同时通过案例说明其在实际项目中的应用场景。本文内容约 5000 字,适合初学者及嵌入式工程师参考。


ARM TrustZone 与 TF-M 简介

TrustZone 技术

ARM TrustZone 是一种硬件安全隔离机制,它将处理器资源划分为两个世界:

  1. 安全世界 (Secure World, SW):运行可信代码和安全服务,例如密钥管理、加密运算。
  2. 非安全世界 (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 的主要组件包括:

  1. Bootloader(BL1/BL2)

    • BL1:初始引导,最小化可信固件
    • BL2:加载并验证 TF-M Secure Firmware
  2. Secure Partition Manager (SPM)

    • 管理安全世界的服务分区
    • 分区可独立运行,互相隔离
  3. PSA Secure Services

    • PSA Crypto API:加密运算
    • PSA Internal Trusted Storage (ITS):安全存储
    • PSA Protected Storage (PS):保护应用数据
  4. Non-Secure Interface

    • 提供给非安全应用的 API
    • Veneer 函数封装调用

TF-M 代码获取与构建

源码获取

ARM 官方 Git 仓库提供 TF-M 源码,常用命令:

bashCopy Code
git clone https://github.com/ARM-software/TF-M.git cd TF-M git checkout tf-m-1.14.0 # 示例版本

源码目录结构:

Copy Code
TF-M/ ├── bootloader # BL1/BL2 ├── secure_fw # 安全世界固件 ├── tfm_sst # 安全存储服务 ├── tfm_crypto # 加密服务 ├── platform # BSP 平台适配 ├── docs # 文档 └── examples # 示例工程

编译环境准备

  1. 安装 GNU Arm Embedded ToolchainKeil MDK
  2. 安装 CMake
  3. 安装 Python 3 用于构建脚本

Linux 下示例命令:

bashCopy Code
sudo apt update sudo apt install build-essential cmake python3

编译与生成

Cortex-M33 NXP 平台 为例:

bashCopy Code
cd 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 Code
const struct partition_t tfm_partitions[] = { { "crypto_partition", PARTITION_ID_CRYPTO, ... }, { "storage_partition", PARTITION_ID_STORAGE, ... } };

调试与日志分析

  • 使用 Segger RTT/ITM 输出日志
  • 使用 GDB 调试安全和非安全世界
  • 注意 硬件隔离导致的调试限制

案例与实例

安全启动

  1. MCU 上电 → BL1 运行
  2. 验证 BL2 镜像签名
  3. BL2 加载 TF-M Secure Firmware
  4. 安全服务初始化
  5. 非安全应用启动

示例代码:

cCopy Code
if (!tfm_secure_init()) { printf("Secure Firmware init failed!\n"); while(1); }

PSA Crypto 使用示例

非安全应用调用加密服务:

cCopy Code
psa_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 设备,确保固件不可被篡改。


应用场景

  1. 智能家居:保证设备固件安全,防止