手机网站设计宽度,河南网站备案中心,网站设计网站项目流程,厦门seo优化推广Linux-arm(1)ATF启动流量
Author#xff1a;Once Day Date#xff1a;2025年1月22日
漫漫长路有人对你微笑过嘛…
全系列文章可查看专栏: Linux实践记录_Once_day的博客-CSDN博客
参考文档#xff1a;
ARM Trusted Firmware分析——启动、PSCI、OP-TEE接口 Arnold Lu 博…Linux-arm(1)ATF启动流量
AuthorOnce Day Date2025年1月22日
漫漫长路有人对你微笑过嘛…
全系列文章可查看专栏: Linux实践记录_Once_day的博客-CSDN博客
参考文档
ARM Trusted Firmware分析——启动、PSCI、OP-TEE接口 Arnold Lu 博客园Trusted Firmware-A Documentation — Trusted Firmware-A 2.12.0 documentationGitHub - ARM-software/arm-trusted-firmware: Read-only mirror of Trusted Firmware-ALinux 核心專題: Trusted Firmware-A 及 Linux 啟動流程分析 - HackMD 文章目录 Linux-arm(1)ATF启动流量1. 概述1.1 ATF-A介绍1.2 ATF-A启动流程1.3 BL1固件1.4 BL2固件1.5 BL31固件 2. 启动流程一览图 1. 概述
1.1 ATF-A介绍
ARM ATF-A (ARM Trusted Firmware-A)是ARM官方为ARMv8-A架构提供的一套开源、安全、可靠的参考firmware实现。它主要面向ARM64(AArch64)和ARM32(AArch32)架构提供了全面的安全世界(Secure World)支持和丰富的功能。
ATF-A支持ARMv7-A和ARMv8-A架构系列处理器包括Cortex-A53/57/72/73/75/76/77等。通过实现ARMv7-A和ARMv8-A架构的安全扩展ATF-A能在EL3异常级提供可信执行环境。 上图源自于Linux 核心專題: Trusted Firmware-A 及 Linux 啟動流程分析 - HackMD 1安全世界支持 ATF-A固件运行在EL3(最高异常级)提供了安全世界的基础设施。它负责处理器的安全启动、各异常级之间的世界切换、中断管理等关键安全职责。ATF-A将non-secure世界和secure世界隔离保障了系统安全。
2PSCI (Power State Coordination Interface) PSCI定义了一套让non-secure软件请求电源管理的标准接口。ATF-A对PSCI的主要函数如CPU_ON、CPU_OFF、SYSTEM_SUSPEND等提供了参考实现并提供具体平台的底层支持代码。
3TBBR-CLIENT (Trusted Board Boot Requirements) TBBR定义了可信启动的客户端要求旨在建立一个可信的启动链。ATF-A参考实现了Trusted Boot的各阶段包括引导ROM、可信引导固件、non-secure引导加载器等最终完成完整可信启动。
4SMC Calling ConventionSMC (Secure Monitor Call)是non-secure世界和secure世界之间通讯的机制。ATF-A规范了ARM架构下SMC调用的编号、参数传递约定、返回值格式等统一了SM层的接口标准。
5SCMI (System Control and Management Interface) SCMI定义了non-secure软件和secure软件之间的系统控制和管理接口,如电源、时钟、sensor等。ATF-A实现了SCMI的message传递标准并提供了通用的SCMI server端的参考实现。
6SDEI (Software Delegated Exception Interface)SDEI让EL3能将某些中断和异常处理委托给更低异常级的non-secure软件提高了中断处理的灵活性。ATF-A实现了事件路由、事件注册等SDEI核心机制。
7固件更新ATF-A对ARM PSA规范的固件更新部分作了参考实现。它定义了一套通用的固件更新架构和接口支持安全的固件版本查询、认证、更新等。
ATF-A作为ARM官方的参考实现在功能上非常全面代码质量也很高已在业界被广泛应用。主要芯片厂商都以ATF-A为基础加入自己的定制开发移植到各自的ARM64平台上。ATF-A极大促进了ARM生态系统中secure firmware的标准化让安全启动和固件实现变得更加规范和可靠。
1.2 ATF-A启动流程
ARM ATF是ARM提供的一套开源的、安全的固件用于ARM处理器的启动和安全管理。它为ARM平台提供了一个标准化的、安全可靠的启动环境。AArch64架构下启动流程主要分为以下五个阶段
Boot Loader stageExecution描述BL1(Boot Loader Stage 1)AP Boot ROMATF的第一阶段启动程序负责初始化硬件、加载并验证BL2BL2(Boot Loader Stage 2)Trusted Boot Firmware第二阶段启动程序负责加载并验证BL31、BL32和BL33BL31(EL3 Runtime Software)EL3 Runtime Firmware运行在EL3异常等级提供安全监视器功能BL32(Secure-EL1 Payload)Secure-EL1 Payload可选组件运行在S-EL1异常等级提供额外的安全服务BL33(Non-trusted Firmware)Non-trusted Firmware非安全世界的固件通常是一个引导程序如U-Boot
下面是AArch64 CPU的启动流程示意图 引用于https://hackmd.io/sysprog/rkxaDOWI3 整体流程描述如下 上电复位当系统上电或复位时处理器进入EL3异常等级从固定地址(如0x0)开始执行BL1。 BL1阶段BL1初始化硬件如MMU、缓存等并加载BL2到内存中。然后BL1验证BL2的完整性和authenticity如果验证通过就跳转到BL2继续执行。 BL2阶段BL2负责加载BL31、BL32(可选)和BL33并验证它们的完整性和authenticity。加载完成后BL2将控制权交给BL31。 BL31阶段BL31初始化EL3异常等级的环境提供安全监视器功能并根据配置加载并执行BL32(如果存在)。然后BL31切换到非安全世界将控制权交给BL33。 BL33阶段BL33通常是一个引导程序如U-Boot。它初始化非安全世界的硬件环境加载并启动操作系统内核如Linux内核。 进入内核Linux内核接管系统控制权完成剩余的硬件初始化并启动系统服务和用户空间进程。
1.3 BL1固件
BL1是Trusted Firmware中的第一级引导加载程序(First Level Bootloader)负责执行最早期的系统初始化和引导工作。BL1位于ROM(Read-Only Memory)中在EL3(Exception Level 3)下从复位向量(Reset Vector)处开始运行。
BL1的主要工作包括:
1决定启动路径根据复位类型(如冷启动、热启动等)决定启动路径。这有助于优化启动流程跳过一些不必要的初始化步骤。
2架构初始化设置异常向量表配置CPU复位处理函数设置重要的控制寄存器如SCRLR_EL3、SCR_EL3、CPTR_EL3、DAIF等。这些初始化为后续的固件执行做好准备。
3平台初始化使能Trusted Watchdog确保系统可靠性。初始化控制台允许输出调试信息。配置硬件一致性互连确保多核之间的数据一致性。配置MMU(Memory Management Unit)准备内存环境。初始化相关存储设备为加载后续固件做准备。
4固件更新处理检查是否需要进行固件更新。如果需要执行固件更新流程。
5BL2镜像加载和执行BL1输出Booting Trusted Firmware信息。BL1将BL2镜像从非易失性存储加载到SRAM(Static Random-Access Memory)中。如果SRAM空间不足或者BL2镜像校验失败输出Failed to load BL2 firmware.错误信息。BL1切换到Secure EL1将执行权交给BL2。
总的来说BL1是Trusted Firmware引导流程中的第一个阶段主要负责最基本的系统初始化和BL2的加载。它为后续的引导阶段(BL2、BL31、BL32、BL33)做好了准备是整个可信引导流程的起点。
1.4 BL2固件
BL2是Trusted Firmware中的第二级引导加载程序(Second Level Bootloader)承担了更多的系统初始化任务和引导后续固件的责任。BL2位于SRAM(Static Random-Access Memory)中运行在Secure EL1(Exception Level 1)下。
BL2的主要工作包括:
1架构初始化在EL1和EL0中使能浮点单元(Floating-Point Unit)使能ASMID(Address Space Memory Identifier)。
2平台初始化进一步初始化控制台支持更丰富的调试输出。初始化相关存储设备为加载其他固件做准备。配置MMU(Memory Management Unit)建立更完善的内存环境。对相关设备进行安全配置确保系统安全性。
3加载并执行SCP_BL2(System Control Processor Firmware)SCP_BL2是一个独立的固件用于控制系统功耗、时钟、复位等。BL2负责将SCP_BL2加载到专用的系统控制核(System Control Processor)上执行。
4加载BL31镜像(EL3 Runtime Firmware)BL2将控制权交还给BL1BL1关闭MMU和Cache为BL31的执行做准备。BL1将控制权交给BL31由BL31继续引导流程。
5加载BL32镜像(Secure Payload)BL32运行在安全世界(Secure World)提供安全服务BL2依赖BL31将控制权交给BL32。SPSR(Saved Program Status Register)通过Secure-EL1 Payload Dispatcher进行初始化以支持BL32的执行。
6加载BL33镜像(Non-secure Firmware)BL33通常是一个非安全的固件如UEFI(Unified Extensible Firmware Interface)。BL2依赖BL31将控制权交给BL33由BL33继续引导操作系统。
可以看到BL2在Trusted Firmware的引导流程中扮演了非常重要的角色。它不仅负责更多的系统初始化工作还要协调和加载其他关键固件如SCP_BL2、BL31、BL32和BL33。
1.5 BL31固件
BL31是Trusted Firmware中的EL3运行时固件(EL3 Runtime Firmware)运行在最高的异常等级EL3(Exception Level 3)下。BL31位于SRAM(Static Random-Access Memory)中是整个Trusted Firmware的核心组件。
除了进行必要的架构和平台初始化外BL31还承担了以下关键任务:
1初始化PSCI(Power State Coordination Interface)服务PSCI是一种标准的接口用于管理CPU的功耗状态。BL31实现了PSCI服务供其他软件调用。通过PSCI服务BL31可以控制CPU的上电、下电、休眠等操作。
2初始化并执行BL32镜像(Secure Payload)BL32运行在Secure EL1模式下提供安全服务。BL31负责初始化BL32的执行环境并将控制权交给BL32。BL32可以是OP-TEE(Open Portable Trusted Execution Environment)等安全操作系统。
3初始化非安全世界(Non-secure World)的执行环境根据配置BL31可以初始化非安全世界的EL2或EL1。初始化完成后BL31将控制权交给BL33(如UEFI)由BL33继续引导非安全操作系统。
4负责安全世界和非安全世界之间的切换在Arm架构中EL3是安全世界和非安全世界的切换门户。BL31实现了世界切换的机制确保两个世界之间的安全隔离。当非安全世界需要访问安全服务时会通过SMC(Secure Monitor Call)指令触发世界切换。
5分发和处理安全服务请求非安全世界通过SMC指令请求安全服务。BL31接收并分发这些请求调用相应的安全服务处理函数。安全服务可以包括PSCI服务、Trusted OS服务、固件更新服务等。
可以看到BL31是Trusted Firmware的核心承担了大量的关键职责。它不仅要初始化和管理安全世界的执行环境还要作为安全世界和非安全世界之间的桥梁和守卫者。
BL31需要提供各种标准化的服务接口如PSCI以便其他软件可以方便地使用这些服务。同时BL31还要保证世界切换的安全性严格控制非安全世界对安全资源的访问。
2. 启动流程一览图 上图源自于ARM Trusted Firmware分析——启动、PSCI、OP-TEE接口 - ArnoldLu - 博客园