> 技术文档 > ARM的安全启动—ATF TF-A以及它与UEFI的互动_atf runtime spmd_arm atf

ARM的安全启动—ATF TF-A以及它与UEFI的互动_atf runtime spmd_arm atf

ARMv8 提供了两种安全状态:Secure 和 Non-secure,也就是安全和非安全,Non-secure 也就是正常世界(NormalWorld)。我们可以在 Non-secure 运行通用操作系统,比如 Linux,在 Secure 运行可信操作系统,比如OP-TEE,这两个操作系统可以同时运行,这个需要处理器支持 ARM 的 TrustZone 功能。在 Normal world 和 Secure world下,ARMv8 个 EL 等级对应的内容和在 ARMv8 的 AArch32 模式下,处理器模式如图所示:

图片

在 AArch32 模式下,EL0~LE3 对应 ARMv7 的不同工作模式:

  1. EL0:对应 ARMv7 的 User 工作模式
  2. EL1:对应 ARMv7 的 SVC、ABT、IRQ、IRQ、UND 和 SYS 这 6 中工作模式
  3. EL2:对应 ARMv7 的 Hyp 工作模式
  4. EL3:对应 ARMv7 的 Mon 工作模式

可以看出,只有 EL3 是用于安全监视器的,所以 TF-A 主要工作在 EL3 下,在看 TF-A源码的时候会看到大量的“EL3”字样的文件或代码

ATF带来最大的变化是信任链的建立(Trust Chain),整个启动过程包括从EL3到EL0的信任关系的打通,过程比较抽象。NXP的相关文档[2]比较充分和公开,它的源代码也是开源的[3]。我们结合它的文档和源代码来理解一下。

ATF启动流程

ARM开源了ATF的基本功能模块,大家可以在这里下载:

git clone https://github.com/ARM-software/arm-trusted-firmware.git

里面已经包含了不少平台,但这些平台的基础代码有些是缺失的,尤其是和芯片部分和与UEFI联动部分。这里我推荐它的一个分支:NXP的2160A芯片的实现。

ARM推出了System Ready计划,效果相当不错,关于它我们今后再单独讲。2020年底,ARM在OSFC推出新的一批System Ready机型[4],NXP 2160A名列其中:

ARM的安全启动—ATF TF-A以及它与UEFI的互动_atf runtime spmd_arm atf

来源:参考资料4

ATF代码下载可以用:

git clone https://source.codeaurora.org/external/qoriq/qoriq-components/atf -b LX2160_UEFI_ACPI_EAR3

UEFI代码下载可以用图片上的地址。我们可以把参考资料2和这些代码对照来看,加深理解。
支持ATF的ARM机器,启动过程如下

ARM的安全启动—ATF TF-A以及它与UEFI的互动_atf runtime spmd_arm atf

来源:参考资料2

注意蓝色箭头上的数字,它是启动顺序。一切起源于在EL3的BL1。

BL1:Trusted Boot ROM

启动最早的ROM,它可以类比Boot Guard的ACM,

老狼:什么是Boot Guard?电脑启动中的信任链条解析269 赞同 · 44 评论文章​编辑

不过它是在CPU的ROM里而不是和BIOS在一起,是一切的信任根。它的代码在这里:

ARM的安全启动—ATF TF-A以及它与UEFI的互动_atf runtime spmd_arm atf

代码很简单(略去不重要内容):