bl2镜像将为后续镜像的加载执行相关的初始化操作,主要是内存、mmu、串口以及el3软件运行环境的设置,并且加载bl3x的镜像到内存中。
通过查看bl2.ld.s文件可发现,bl2镜像的入口函数是bl2_entrypoint。该函数定义在bl2/aarch64/bl2_entrypoint.s文件中。该阶段的执行流程如图所示。
bl2执行流程
bl2_entrypoint函数bl2_entrypoint函数最终会触发安全监控模式调用(smc) ,通知bl1将cpu的控制权限转交给bl31,然后执行bl31。
该函数会执行
• 平台相关的初始化、• 获取存放bl3x镜像文件的结构体变量、• 解析出bl31的入口地址等。该函数的主要内容和注释如下:
func bl2_entrypoint mov x20, x1 //获取可用安全内存的起始地址 adr x0, early_exceptions //设定异常向量 msr vbar_el1, x0 //将异常向量表地址写入到vbar寄存器中 isb msr daifclr, #daif_abt_bit //使能serrot中断 /* 使能指令cache、栈顶地址以及数据访问权限对齐检查 */ mov x1, #(sctlr_i_bit | sctlr_a_bit | sctlr_sa_bit) mrs x0, sctlr_el1 orr x0, x0, x1 msr sctlr_el1, x0 isb /* 获取有效的rw内存以备bl2使用 */ adr x0, __rw_start__ //获取rw内存的起始地址 adr x1, __rw_end__ //获取rw内存的末端地址 sub x1, x1, x0 //计算出rw内存的大小 bl inv_dcache_range //禁止数据cache ldr x0, =__bss_start__ //获取bl2中bss段的起始地址 ldr x1, =__bss_size__ //获取bl2中bss段的大小 bl zeromem //清空bss段中的内容 #if use_coherent_mem ldr x0, =__coherent_ram_start__ ldr x1, =__coherent_ram_unaligned_size__ bl zeromem #endif bl plat_set_my_stack //初始化bl2运行的栈 #if stack_protector_enabled bl update_stack_protector_canary //更新栈保护区域数据 #endif mov x0, x20 bl bl2_early_platform_setup //设置平台相关 bl bl2_plat_arch_setup //设置架构相关 bl bl2_main //跳转到bl2的主要函数执行,从该函数中跳转到bl31以及bl32或者bl33 no_ret plat_panic_handler endfunc bl2_entrypoint在bl2_entrypoint函数中, 完成bl2运行栈的初始化,配置完运行环境后 ,会调用 bl2_main函数来完成bl2对bl3x镜像的加载 ,而cpu控制权限的转移则是通过触发安全监控模式调用(smc)来实现。
中微半导体登陆科创板 将力争在未来十年内发展成为国际一流的半导体设备公司
ams的POW:COM接口加护解决真无线耳塞结构设计问题
关于学习Linux的一些建议
超长续航充电宝哪个牌子好用?超长续航充电宝推荐
基于MIC3203驱动器的LED电路设计
ATF中bl2的启动
ModbusTCP转EtherNetIP网关连接昆仑通态触摸屏案例
如何调节恒温恒湿试验箱的风速,有哪些方法
丰田继续加码机器人与无人驾驶,追加以色列投资量
程序员写代码需要有什么样的好习惯
ARM推出ARM Mali-450 MP图形处理器(GPU)
记者眼中的夏普10代面板厂
致态 TiPlus5000 固态硬盘:畅玩游戏不在话下
关于Mercedes-Benz车用柴油机性能分析
谁能成为国产IC的第二个山寨王,瑞芯微、君正还是海思半导体?
信创OPS电脑,助力智慧教育转型
半导体行业需要关注的静电问题及解决方案
C语言的进阶操作实例讲解
勒索病毒变种卷土重来:伪装《王者荣耀》辅助工具对准安卓机下手
匈牙利电动汽车投资激增 比亚迪或在当地建厂