系统上电之后首先会运行ChipRom,之后会跳转到ATF的bl1中继续执行。bl1主要初始化CPU、设定异常向量、将bl2的镜像加载到安全RAM中,然后跳转到bl2中开始运行。
bl1的主要代码存放在bl1目录中,bl1的链接文件是bl1/bl1.ld.s文件,该文件指定bl1的入口函数是bl1_entrypoint。
AArch32的该函数定义在bl1/aarch32/bl1_entrypoint.S文件中,AArch64的该函数定义在bl1/aarch64/bl1_entrypoint. S文件中。bl1的执行流程如图所示。
bl1执行流程
bl1_entrypoint函数说明
bl1_entrypoint函数主要完成ARMv8架构中EL3执行环境的基础初始化、设定异常向量表、加载bl2的镜像文件到内存中并进行跳转到bl2继续执行。该函数的内容如下:
func bl1_entrypoint
/* EL3级别运行环境的初始化,该函数定义在include/common/aarch64/el3_common_macros.S文
件中*/
el3_entrypoint_common
_set_endian=1
_warm_boot_mailbox=! PROGRAMMABLE_RESET_ADDRESS
_secondary_cold_boot=! COLD_BOOT_SINGLE_CPU
_init_memory=1
_init_c_runtime=1
_exception_vectors=bl1_exceptions
bl bl1_early_platform_setup //调用bl1_early_platform_setup函数完成底层初始化
bl bl1_plat_arch_setup //调用bl1_plat_arch_setup完成平台初始化
bl bl1_main //调用bl1_main函数,初始化验证模块,加载下一阶段的
image到RAM中
b el3_exit //调用el3_exit函数,跳转到下一个image(bl2)
endfunc bl1_entrypoint
el3_entrypoint_common函数执行时带入的参数包括大小端标识、属于冷启动还是重启操作、是否是从核的启动、是否需要进行内存初始化、是否需要建立C语言运行环境(栈初始化)、异常向量表地址注册等。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
ARM
+关注
关注
134文章
8653浏览量
361844 -
函数
+关注
关注
3文章
3903浏览量
61310 -
Code
+关注
关注
0文章
65浏览量
15276
发布评论请先 登录
相关推荐
【OK210试用体验】S5PV210 IROM BL0启动
,在启动引导阶段有两个作用:一是IROM运行时使用的数据变量所在的区域,二是IROM,即BL0会将外存中的BL1引导到该区域中。因为IROM启动
发表于 07-23 15:35
【NanoPi M2试用体验】+SD卡启动BL1拷贝BL2到DDR2中运行
裸机程序SD卡启动BL1拷贝BL2到DDR2中运行;代码的拷贝会用到一些指针函数,第一个参数为SD卡存放BL2的开始BLOCK,第二个参数
发表于 06-11 17:03
S32g如何在ATF中启用安全启动?
/cortexa53-wrs-linux/atf-s32g/2.5-r0/build/batman/release/bl2/bl2 .elf] 错误 1 原来的 BSP 版本似乎不支持
发表于 04-03 07:12
ATF的启动过程介绍
ATF的启动过程根据ARMv8的运行模式(AArch32/AArch64)会有所不同,但基本一致。 在AArch32中是不会去加载bl31而是将EL3或者Monitor模式的运行代码保存在bl
ATF中bl2的启动
bl2_entrypoint函数最终会触发安全监控模式调用(smc) ,通知bl1将CPU的控制权限转交给bl31,然后执行bl31。 该函数会执行 • 平台相关的初始化、 • 获取
uboot的启动BL1和BL2两个阶段介绍
之前对这个uboot的源码了解有些许遗忘。最近做AVB校验,需要uboot到kernel的这个过程。这里再复习一下。 与大多数BootLoader一样,uboot的启动过程分为BL1和BL2两个阶段
评论