bl 1
bl 1 是 tf-a 的第一个启动阶段,芯片复位以后就会运行 bl1 镜像,tf-a 提供了 bl1 源码。但是,实际上 bl1一般是半导体厂商自己编写的内部 boot rom 代码,并没有使用 tf-a 提供的 bl1 镜像。因此 bl1部分的实现就千差万别,不同的半导体厂商有不同的实现方法。
一般 bl1 要做的就是初始化 cpu,如果芯片支持不同的启动设备,那么还需要初始化不同的启动设置,比如 nand、emmc、sd、usb或串口等。然后根据 boot 引脚的高低电平来 判断当前所选择的启动设备,从对应的启动设备中加载 bl2 镜像,并放到对应的内存中,最后跳转到 bl2镜像并运行。
bl 2
bl 2 会进一步的初始化芯片,比如初始化 ddr、mmu、串口等。bl2 会将剩下三个阶段 (bl31、bl32 和bl33)对应的镜像加载到指定的内存中,最后根据实际情况来启动剩下三个阶段的镜像。
bl 31
在 aarch64 中,bl31 主要是 el3 的 runtime 固件。
bl 32
bl32 一般为安全系统(tee os)固件,比如 op-tee。tf-a 为 aarch32 提供了 el3 的 runtime 软件,这个runtime 软件就是 bl32 固件,sp_min 就是这个 runtime 软件。大家可以打开 tf-a 的 bl32
源码文件夹,其下就有一个名为“sp_min”的子文件夹,这个就是 bl32 的 sp_min 源码,如图所示:
bl32 提供运行时安全服务,在 tf-a 中默认使用 sp_min。sp_min 是一个最小的 aarch32 安全负载(secure payload),整合了 psci 库以及 aarch32 的 el3 运行时软件。sp_min 可以替代可信系统(tee os)或者可信执行环境(tee),比如 op-tee。用户可以自行选择 bl32 使用哪个软件包。
bl32 充当安全监控(secure monitor),因此它向非安全系统(non-secure os,比如 linux)提供了一些安全服务。非安全的应用软件可以通过安全监控调用(secure monitor calls)来使用这些安全服务,这些代码支持标准的服务调用,比如 psci。
bl 33
bl33 就是 normal world 下的镜像文件,比如 uboot。
至此,我们对 tf-a 的基本启动流程有了一个大概的了解,我们知道了 tf-a 分为多个阶段,不同的阶段其工作内容不同。但是,在实际的开发中并不一定会用到 tf-a 中所有启动阶段。
tf-a 是用于完成安全启动的,op-tee 是 tee os,如果使用 op-tee 的话它会和 linux 内核同时运行,op-tee负责可信应用,linux 就是普通的应用程序。
tf-a 分为了不同阶段:bl1、bl2、bl31、bl32 和 bl33,这个主要是面向 aarch64 的,对于 aarch32 而言只有 4个阶段:
bl1:第 1 个阶段,一般为芯片内部 rom 代码
bl2:第 2 个阶段,可信启动固件
bl32:el3 运行时(runtime)软件
bl33:非安全固件,比如 uboot
其中 bl1、bl2 和 bl32 都属于 tf-a 的一部分(如果你使用 tf-a 提供的 bl1 的话)。
Type-C分线器 ODM厂商随着笔记本的趋势发展
中国广电拿下4.9GHz频段意味着什么
目前国内新能源汽车行业已经形成了白热化的竞争态势
LED显示屏小知识
微型机器人朝著医疗应用迈进一大步
TF-A启动流程详解
MAX16067典型应用电路
抖音自主研发智能反欺诈系统打击诈骗
气焊焊接工艺参数
苹果造车要出意外?现代很不服气:不想做第二个富士康
大数据是怎样的一项技术
vivo发布X30系列宣传片 采用全球最小孔径星眸屏方案
全自动卷料送料激光切割机怎么样
合众新能源哪吒汽车携麾下两款新车型亮相车展
区块链技术的六大特性介绍
浅谈什么是语音芯片的白噪音支持功能:打造舒适家居与优质音频体验
薄膜电容为什么这么薄?薄膜电容的薄是怎么来的呢?
澳大利亚将开始在新南威尔士州生产自己的可再生储藏锂离子电池
会员日三重奏:vivo服务为你,优惠为你,福利为你
芯爱科技获25亿社会资本,加速高端封装基板国产化进程