code层面 ATF中bl1的启动

描述

系统上电之后首先会运行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语言运行环境(栈初始化)、异常向量表地址注册等。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分