1. ATF 固件概述:起源、作用与在 ARMv8/AArch64 架构中的位置

1.1 ATF 的起源与背景

ARM Trusted Firmware(ATF)是 ARM 官方维护的一套开源参考实现固件,专为 ARMv8-A 及后续架构设计。它的诞生源于移动设备、服务器和嵌入式系统对安全隔离与可信执行环境的刚性需求。在 ARMv8 引入 AArch64 执行状态后,系统软件栈需要一种标准化的底层固件来管理安全世界与非安全世界的切换、电源状态协调以及安全启动流程。

关键里程碑:ATF 最初由 ARM 在 2014 年以 BSD 许可证开源发布,随后成为 Linaro 和 Trusted Firmware 项目的核心组件。目前最新版本已支持从 Cortex-A 系列到 Neoverse 系列的所有 ARMv8-A/AArch64 处理器。

1.2 ATF 在 ARMv8/AArch64 架构中的位置

在 ARMv8 架构中,系统软件栈被划分为四个异常等级(Exception Level),ATF 主要运行在 EL3(最高特权级),负责安全监控器(Secure Monitor)功能。下表展示了各异常等级的典型用途:

异常等级 执行状态 典型软件 安全属性
EL0 AArch64 / AArch32 用户态应用 非安全 / 安全
EL1 AArch64 / AArch32 操作系统内核(Linux / RTOS) 非安全 / 安全
EL2 AArch64 Hypervisor(KVM / Xen) 非安全
EL3 AArch64 ATF / Secure Monitor 安全

ATF 位于 EL3 层,是系统启动时最先执行的固件之一,负责初始化安全世界、建立安全中断路由、提供 SMC(Secure Monitor Call)服务接口,并最终将控制权移交给非安全世界的引导加载程序(如 U-Boot 或 GRUB)。

1.3 ATF 的核心作用

  • 安全启动(Secure Boot):验证后续固件和操作系统镜像的签名,确保只有经过授权的代码才能执行。
  • 安全监控器(Secure Monitor):管理安全世界与非安全世界之间的上下文切换,通过 SMC 指令提供安全服务。
  • 电源状态协调(PSCI):实现 CPU 热插拔、挂起/恢复、系统关机和重启等电源管理功能。
  • 平台初始化:配置 GIC(通用中断控制器)、定时器、MMU 等核心外设,为后续软件提供运行环境。
  • 可信执行环境(TEE)支持:为 OP-TEE、Trusty 等 TEE 提供底层固件接口。

1.4 ATF 软件架构概览

下图展示了 ATF 在 ARMv8 系统中的典型分层架构,以及它与安全世界、非安全世界各组件的交互关系:

ATF 在 ARMv8 系统软件栈中的位置 非安全世界(Normal World) EL0:用户态应用 App / Daemon / Library EL1:Linux 内核 进程调度 / 内存管理 / 驱动 EL2:Hypervisor(可选) KVM / Xen 虚拟化 EL3:ATF(非安全侧接口) SMC 处理 / PSCI 服务 安全世界(Secure World) EL0:安全应用 TEE Client / Secure App EL1:TEE 内核 OP-TEE / Trusty 内核 EL2:安全虚拟化(可选) Secure Hypervisor EL3:ATF(安全侧接口) 安全监控 / 中断路由 SMC 调用 ATF 在 EL3 层同时服务安全世界和非安全世界,通过 SMC 指令实现跨世界通信 PSCI 电源管理、安全启动、中断路由均由 ATF 统一管理

1.5 ATF 的启动流程与组件

ATF 的启动过程分为多个阶段,每个阶段对应一个独立的固件镜像。下表列出了 ATF 的主要组件及其职责:

组件 全称 运行等级 主要职责
BL1 Boot Loader Stage 1 EL3 最初始的 ROM 代码,加载 BL2 并验证其签名
BL2 Boot Loader Stage 2 EL3 加载并验证 BL31/BL32/BL33,配置内存和平台
BL31 Boot Loader Stage 3-1 EL3 运行时固件,提供 SMC 服务和 PSCI 电源管理
BL32 Boot Loader Stage 3-2 EL1-S 安全世界操作系统(如 OP-TEE)
BL33 Boot Loader Stage 3-3 EL2/EL1-NS 非安全世界引导程序(如 U-Boot、GRUB)
优化提示:在嵌入式 Linux 快速启动场景中,BL1 和 BL2 的执行时间通常被严格限制。通过裁剪 BL2 的镜像大小、使用 XIP(原地执行)技术、以及并行化外设初始化,可以将 ATF 阶段的启动时间压缩到 100ms 以内。

1.6 ATF 与嵌入式 Linux 快速启动的关系

ATF 是系统启动的第一道关卡,其执行效率直接影响整体启动时间。在嵌入式 Linux 快速启动优化中,ATF 的优化点包括:

  • 减少 BL1/BL2 的镜像大小:去除不必要的调试信息和驱动,使用 LTO(链接时优化)编译。
  • 优化 PSCI 初始化:延迟非关键 CPU 的启动,优先启动主核加载 Linux 内核。
  • 使用快速 SMC 路径:减少安全监控器切换时的上下文保存/恢复开销。
  • 硬件加速验证:利用 SoC 内置的加密引擎加速镜像签名验证。
注意事项:ATF 的优化必须在保证安全性的前提下进行。切勿为了追求启动速度而跳过安全启动验证或弱化安全世界隔离,否则可能导致系统被恶意固件攻击。

1.7 本章小结