When it is done, BL2 passes control to BL31. 整个解释一下就是说,BL2运行在Secure阶段,提供TF-A下一阶段和Normal World软件的一些额外操作,同时会从FIP的Image里面读取剩下的IMAGE,包括BL31(Runtime firmware,一般叫做运行时环境),BL32(一般就是OPTEE OS),还有UBoot以及BL33(一般就是Linux内核),可以参考...
在ARMv8 架构中,启动流程包含多个阶段,这些阶段被称为 BL (bootloader) 阶段: BL1:第一阶段启动固件,在 RK3568 中位于 BootRom 中,负责引导 BL2 并对其进行安全验证; BL2:第二阶段启动固件,在 RK3568 中位于 Flash 中(比如 eMMC),负责平台相关的初始化,比如 DRAM 的初始化,并负责加载 BL31 并执行 BL31,...
官方将启动分为了BL1,BL2,BL31,BL32,BL33阶段,根据顺序,芯片启动后首先执行BL1阶段代码,接着验签启动BL2,BL2根据具体设计启动BL31或者BL33,BL32只有在有BL31时才可能会存在并被验签加载启动。 armv8分为Secure World和Non-Secure World(Normal World),四种异常级别从高到低分别为EL3,EL2,EL1,EL0。 • Se...
BL1镜像的异常向量表初始化了两个:一个是入口bl1_entrypoint,EL1镜像正常执行流程;另一个是SMC调用接口,EL2执行结束会通过SMC返回执行BL31。 vector_base bl1_vector_table bbl1_entrypointb report_exception /* Undef */bbl1_aarch32_smc_handler/* SMC call */b report_exception /* Prefetch abort */...
BL1主要负责对BL2进行认证加载并执行,并且提供SMC中断服务,便于执行在EL1-Secure的BL2能给把BL31加载到EL3。 2)主过程 BL1的入口代码位于bl1/aarch64/bl1_entrypoint.S文件中,代码注释如下。 .globl bl1_entrypoint func bl1_entrypoint /* BL1的程序入口 */ /* EL3通用的初始化宏 */ el3_entrypoint_common...
4个特权等级、4个安全状态、2个执行状态启动模型中的BL1 BL2 BL31 BL32 BL33的概念2、4个特权等级/4个安全状态之间的跳转模型先弄懂最最最基础的本质原理,10000多页的ARM TRM文档散装了很多场景, 我们总结之后再总结,最后浓缩成了下面这一张框图,通常我们也只要理解下面这张图就可以了:其中:EL0的所有异常...
BL1 BL2 BL33 BL32 BL33 每一级镜像,也许不是aarch64的,也许是aarch32的 如上的场景中,看似也就那么回事吧,无非就是不同特权等级之间,调用同步异常指令或返回指令,切来切去而已。那么如果是相同的特权等级,那么如何切换呢? 如uboot(EL1)到kernel(EL1), 至少有以下三种方式(其实我还能列出第4种第5种,这...
一、BL1阶段 BL1(Bootloader 1)是ARMv8架构中的第一个启动阶段。当系统启动时,BL1负责从非易失存储器中加载和执行接下来的引导加载程序(BL2或BL31)。 在BL1阶段,处理器会执行以下操作: 初始化硬件:包括CPU、内存、中断控制器等。 加载BL2:通过BootROM(非易失存储器)加载BL2到内存中。 设置异常向量表:为后续...
ATF:Arm TrustedFirmware(ARM安全固件),运行在EL3异常级别,ATF为Armv7-A 和 Armv8-A提供了一些安全可信固件。具体包括上面说的:ATF= BL1、BL2、BL31、BL32、BL33,其中BL33有就是U-Boot。都运行在EL3模式。具体为: BL1:也叫bootrom,rom的意思就是只读的,具有最高的执行权限EL3,在 CPU 出厂时就被写死了。
官方将启动分为了BL1,BL2,BL31,BL32,BL33阶段,根据顺序,芯片启动后首先执行BL1阶段代码,接着验签启动BL2,BL2根据具体设计启动BL31或者BL33,BL32只有在有BL31时才可能会存在并被验签加载启动。 armv8分为Secure World和Non-Secure World(Normal World),四种异常级别从高到低分别为EL3,EL2,EL1,EL0。