当前位置:   article > 正文

(01)ATF简介_atf开源吗

atf开源吗

ATF简介

Trusted Firmware-A(ATF)是一款轻量级的开源固件,用于为ARMv8-A SoC平台提供安全启动和运行时环境。它由ARM公司和全球范围内的合作伙伴共同开发和维护,旨在提供一个安全、可靠和可定制的基础固件,以支持ARMv8-A SoC平台的安全引导和操作。它实现了不同的ARM接口标准,如下:

  • 电源状态控制接口(Power State Coordination Interface, PSCI)
  • 安全启动需求(Trusted Board Boot Requirements CLIENT,TBBR-CLIENT)
  • 安全监控模式调用约定(SMC Calling Convention)
  • 系统控制和管理接口(System Control and Management Interface,SCMI)
  • 软件委托异常接口(Software Delegated Exception Interface,SDEI)
  • PSA固件更新规范(PSA FW update specification)

寄存器

名称寄存器功能
SP_ELx栈针寄存器ARMv8包含四个异常等级,对应有四个SP栈针寄存器SP_EL0~SP_EL3,SP_EL0可以被任何异常等级使用,其他异常等级会使用对应的SP_ELx寄存器
PSTATE处理器状态寄存器表示处理器状态,包含条件标志位,执行状态控制,异常掩码标志位,访问权限
SPSR备份程序状态寄存器用于保存程序在异常处理过程中的状态。在发生异常时,CPU会将PSTATE寄存器值保存到SPSR寄存器中,然后切换到异常处理程序;处理完成后恢复SPSR的值到PSTATE寄存器中
SCR_EL3安全配置寄存器设置安全相关的属性,只有EL3等级可以配置,其他等级没有
SCTLR_EL3系统控制器设置EL3等级下的状态控制信息,包括MMU,对齐检查,cache控制,内存权限,数据大小端
ELR_ELx异常链接寄存器存放异常返回的地址,在异常处理完成后恢复到PC中

主要功能

ARM将ATF作为底层固件并且开源出来,目的在于将ARM底层的操作统一,以使代码能够重用和便于移植。ATF主要实现了以下功能:

  • 安全引导功能:提供了安全启动功能,可以验证和加载下一级固件,包括UEFI、Linux Kernel等,以保护系统免受恶意软件和攻击的威胁。
  • 安全运行时环境:支持TrustZone技术,提供了安全运行时环境,以实现安全保护和隔离。在TF-A中,TrustZone技术分为两个安全状态:安全状态(Secure state)和非安全状态(Non-secure state),并提供了相应的API和服务。
  • 异常处理:支持异常处理,可以处理系统中的各种异常,包括中断、系统调用、指令异常、数据异常等。
  • 调试支持:提供了调试支持,可以通过JTAG或者其他调试接口,对系统进行调试和分析。
  • 硬件访问:提供了硬件访问接口,可以与硬件设备进行交互,以提供各种系统服务。
  • 虚拟化支持:支持虚拟化,可以与EL2和EL1异常级别进行交互,以支持虚拟化和操作系统的启动和管理。
  • 系统初始化:提供了系统初始化功能,可以初始化系统的各种硬件设备,并准备好系统的各种环境,以便启动下一级固件。

ATF将整个启动过程如下图所示。

ATF启动流程

加载流程

ATF的加载流程划分为多个阶段,用BLx来表示,典型的有BL1、BL2、BL31、BL32、BL33等,典型的加载流程如下。

BL1
BL2
BL31
BL32
BL33
  • BL1:BL1是芯片上电后的第一阶段,一般这部分代码称为BootROM,其是固化在芯片的内部,不能修改和升级。其负责初始化设备内部的一些重要寄存器、存储器等硬件资源,并加载和跳转到下一阶段BL2。对于安全启动,是将bootrom作为启动时的信任根。
  • BL2:BL2完成相关的初始化操作, 主要是内存、 MMU、 串口以及EL3软件运行环境的设置;从存储介质中加载BL3x等镜像,并验证镜像的完整性和真实性;将控制权传递给BL31,跳转到下一阶段BL31。
  • BL31:包含两部分功能,在启动时作为启动流程的一部分,执行软硬件初始化以及启动BL32和BL33镜像。在系统启动完成后,将继续驻留于系统中,并处理来自其它异常等级的smc异常,以及其它需要路由到EL3处理的中断等。
  • BL32:Bl32主要用于运行Trusted OS,如optee,它主要用来保护用户的敏感数据(如密码、指纹、人脸等),以及与其相关的功能模块,如加解密算法,ta的加载与执行,secure storage等。。
  • BL33:BL33一般是非安全世界的BootLoader,如u-boot,其用于启动最终的操作系统内核kernel。

启动流程

由于ARMv8架构提出了不同的异常级别,每个阶段运行在不同的异常等级,其典型的启动流程如下。

1:ERET
2:SMC
3:ERET
4:ERET
5:SMC
6:ERET
BL1(EL3)
BL2(S-EL1)
BL31(EL3)
BL32(S-EL1)
BL33(NS-EL1/EL2)
  • 复位后BL1运行在EL3,它执行完成后会通过异常返回ERET的方式跳转到BL2

  • BL2执行完成后需要跳转到BL31,由于BL31运行在EL3异常等级,只能通过smc异常触发进入EL3异常等级

  • BL1捕获SMC异常,根据BL2传入的参数设置BL31的入口地址和系统初始状态,通过ERET跳转到BL31的入口地址处执行

  • BL31根据其镜像加载信息设置入口地址以及其它状态,并完成跳转BL32

  • BL32加载完成后将通过SMC返回到BL31

  • BL31跳转到non secure EL1或non secure EL2以执行BL33

阶段异常等级功能描述
BL1EL3AP Boot ROM加载bl2
BL2Secure EL1Trusted Boot Firmware加载bl3x
BL31EL3EL3 Runtime Firmware启动TEE-OS;启动REE镜像
BL32Secure EL1TEE-OS(如OP-TEE)运行Trusted-OS
BL33NS-EL1/EL2Non-Trusted Firmware(如U-Boot)加载kernel

欢迎关注“安全有理”微信公众号。

安全有理

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/129965
推荐阅读
相关标签
  

闽ICP备14008679号