tf-a启动阶段

image
当芯片复位以后首先运行 bl1 代码,bl1 一般是芯片内部的 ROM 代码,bl1 主要工作就是将外置 Flash 中的 bl2 固件加载到指定的 RAM 中,然后跳转到 bl2 部分。
bl2 为安全启动固件,bl 2 会将剩余的三个启动阶段 bl31、bl32 和 bl33 对应的镜像文件加载到指定的内存中。比如 bl32 中的安全操作系统(OP-TEE),bl31 中的 EL3 运行时固件(Runtime Firware),bl33 中的 uboot。bl2 将这些固件加载完成以后就会启动相应的固件,也就是进入到第三启动阶段。
TF-A 启动流程就是:bl1→ bl2→( bl31/ bl32/ bl33)。注意,bl31、bl32 和 bl33 对应的镜像不需要全部都有,但是 bl33 一般是必须的,因为 bl33 一般是 uboot,这个是很重要的!

bl1

bl 1 是 TF-A 的第一个启动阶段,芯片复位以后就会运行 bl1 镜像,TF-A 提供了 bl1 源码。但是,实际上 bl1 一般是半导体厂商自己编写的内部 Boot ROM 代码,并没有使用 TF-A 提供的bl1 镜像,比如 STM32MP1 的内部 ROM 代码就是 bl 1。因此 bl1 部分的实现就千差万别,不同的半导体厂商有不同的实现方法。
一般 bl1 要做的就是初始化 CPU,如果芯片支持不同的启动设备,那么还需要初始化不同的启动设别,比如 NAND、EMMC、SD、USB 或串口等。然后根据 BOOT 引脚的高低电平来判断当前所选择的启动设备,从对应的启动设备中加载 bl2 镜像,并放到对应的内存中,最后跳转到 bl2 镜像并运行。

bl2

bl 2 会进一步的初始化芯片,比如初始化 DDR、MMU、串口等。bl2 会将剩下三个阶段(bl31、bl32 和 bl33)对应的镜像加载到指定的内存中,最后根据实际情况来启动剩下三个阶段的镜像。

bl31

在 AArch64 中,bl31 主要是 EL3 的 Runtime 固件。

bl32

bl32 一般为安全系统(TEE OS)固件,比如 OP-TEE。TF-A 为 AArch32 提供了 EL3 的 Runtime软件,这个 Runtime 软件就是 bl32 固件,sp_min 就是这个 Runtime 软件。大家可以打开 TF-A的 bl32 源码文件夹,其下就有一个名为“sp_min”的子文件夹,这个就是 bl32 的 sp_min 源码,如图所示:image

bl33

bl33 就是 Normal World 下的镜像文件,比如 uboot。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值