BL1是系统启动的第一阶段,其主要目的是初始化系统环境和启动第二阶段镜像BL2。它的代码定位在: /atf/bl1/aarch64/bl1.ld.S 。 bl1.ld.S文件为 BL1 阶段的第一个文件,定义了 BL1阶段使用的内存、代码段、数据段等信息,此外最重要的是通过ENTRY标号定义了BL1阶段的入口函数bl1_entrypoint,在此入口函数中调用...
在bl1完成了bl2 image加载到RAM中的操作,中断向量表设定以及其他CPU相关设定之后,在bl1_main函数中解析出bl2 image的描述信息,获取入口地址,并设定下一个阶段的cpu上下文,完成之后,调用el3_exit函数实现bl1到bl2的跳转操作,进入到bl2中执行. 2.bl2跳转到bl31执行 在bl2中将会加载bl31, bl32, bl33的image到对...
3.1bl31_early_platform_setup2 该函数先初始化qemu控制台,然后解析bl2传入的镜像描述链表参数,并将解析到的bl32和bl33镜像ep_info保存到全局变量中。其主要流程如下: qemu_console_init(); (1) bl_params_t *params_from_bl2 = (bl_params_t *)arg0; (2) … bl_params_node_t *bl_params = params...
BL2:BL2在flash中的一段可信安全启动代码,主要完成一些平台相关的初始化,比如对ddr的初始化等。因为BL31和BL32是一个runtime,也就是上电后一直运行的程序,那么需要加载到内存里面,需要先初始化内存ddr,BL2就干这个事情的。所谓的Loder。 BL31:作为EL3最后的安全堡垒,它不像BL1和BL2是一次性运行的。如它的runti...
bl2到bl31的跳转 在bl2_main函数中最终会调用smc(BL1_SMC_RUN_IMAGE,(unsigned long)next_bl_ep_info,0,0,0,0,0,0)来触发一个类型为BL1_SMC_RUN_IMAGE的安全监控模式调用。 安全监控模式调用的处理接口在bl1阶段时被指定,调用该函数时传入的command ID是BL1_SMC_RUN_IMAGE,故执行该函数之后,系统将跳转...
检查bl2.ld.S 文件可以确定,BL2 Image的入口函数是 bl2_entrypoint , 定位代码为 /atf/bl2/aarch64/bl2_entrypoint.S func bl2_entrypoint/*--- * Save arguments x0 - x3 from BL1 for future * use. * --- *//* 保存 bl1 的传参 */mov x20, x0 mov...
ARM系统启动流程分为多个阶段,包括BL1、BL2、BL31、BL32与BL33。BL1是启动的第一阶段,必须存储在可直接执行的介质中,如NOR Flash或Boot ROM。随后,BL1加载BL2至内部静态RAM,完成DDR初始化。BL31作为安全监控阶段,负责确保系统安全运行。BL32则执行可信操作系统,而BL33通常为U-Boot或UEFI,用于...
3、ATF的启动废话不多说,直接上图,请自行理解:BL1 BL2 BL31 BL32 BL33的概念、EL3 S-EL1 NS-EL1的概念。4、进入ATF的和退出ATF方式透过事务看本质, 进入和退出ATF,就是就是EL等级切换的过程,那么EL等级都是怎么切换的呢?通过下面一张图就可以说明这一切:(事实上除了以上同步异常指令,如果是触发异步...
BL1(Bootloader Level 1):位于ROM中,负责初始化硬件和加载BL2。BL2(Bootloader Level 2):位于RAM中,运行在安全模式下,负责加载BL31。BL31(Bootloader Level 3-1):运行在EL3级别,负责初始化安全服务和加载BL32。BL32(Bootloader Level 3-2):运行在安全EL1级别,通常用于加载TEE(Trusted Execution ...
BL1是系统启动的第一阶段,其主要目的是初始化系统环境和启动第二阶段镜像BL2。详细流程如下:入口函数:bl1_entrypoint,由bl1/bl1.ld.S通过ENTRY标号定义。首先初始化EL3环境,执行平台相关的初始化流程,接着加载下一阶段镜像、为其准备合适的参数,最后跳转到下一阶段镜像入口处运行。具体实现细节如下...