高通8996启动流程-3. sbl1启动流程

1. 前言

本文档主要对MSM8996的启动流程进行一个简要的分析,目的在于展现启动流程的概貌,不会对每个细节做很详细的表述,但会对启动流程的关键节点进行重点说明。前面介绍8996的整体启动流程,本文主要介绍XBL #REG1也就是sbl1的启动流程。

sbl1位于boot_images/QcomPkg/Msm8996Pkg/Library/XBLLoaderLib/sbl1.s
Sbl1即为XBL REG1

2. sbl1总体流程

在这里插入图片描述

  1. sbl1_entry首先主要完成了ARMV8体系结构相关的操作,主要设置了各个模式下所使用到的栈空间;
  2. 返回到SVC模式;
  3. 调用了主函数sbl1_main_ctl

3.sbl1_main_ctl(pbl_shared)流程

在这里插入图片描述

sbl1_main_ctl
为sbl1的主函数,主要做一些重要外设的初始化,如RAM的初始化,为下一步程序的运行做准备

boot_config_process_bl
它会循环将各个协处理器的镜像加载到内存的相应位置

4. boot_config_process_bl

在这里插入图片描述

每个协处理器都会根据自己的情况来初始化自己的结构体变量,保存了前处理、镜像加载、镜像认证、后处理、镜像执行等回调函数,boot_config_process_bl会循环对各个协处理器的的这些回调按照pre, load, auth, exec,post的顺序执行,通过各个协处理器回调的定义可以看到,只有QSEE实现了jump_func函数,因此最终会跳转到qsee_jump_func执行,qsee内部执行的代码是不开源的,但是最终它会跳转到lk继续执行

4.1 Execute pre_procs

在这里插入图片描述

4.1.1 load_pmic_pre_procs

在这里插入图片描述
API called twice, this first time passes default compiled CDT contents to DDR driver, in case CDT only contains Platform CDB. Second call will update DDR driver with Flashed CDT DDR CDB contents, if DDR CDB was found in flashed CDT

  • boot_falsh_init
    对存储设备的初始化

  • sbl1_ddr_set_default_params
    读取默认的CDT数据拷贝到SHARED_IMEM_BOOT_CDT_BASE,这个默认的CDT数据是与XBL镜像打包在一起的,除非CDT分区有存放CDT,否则将使用默认的CDT

4.1.2 load_qsee_devcfg_image_pre_procs

在这里插入图片描述

最关键的是完成DDR的初始化

5. 总结

SBL1主要完成的工作如下:

  1. 设置ARMV8各个模式下所使用到的栈空间,并返回到SVC模式;
  2. 外设的初始化,如RAM的初始化;
  3. 将各个协处理器的镜像加载到内存的相应位置;
  4. 跳转到qsee,并由qsee最终跳转到lk
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值