Jimmy Chen

A Programmer

(原创)高通SBL1源码初步分析

最近工作从MTK平台转移到高通平台,然后先研究了下高通平台的启动流程,高通平台的启动流程如下截图(截图来源于网络)

启动流程

《(原创)高通SBL1源码初步分析》

  从图中总结启动流程如下:

  1. AP侧CPU上电
  2. 在Cortex-A53芯片内部ROM的PBL首先运行,PBL会从boot device中加载并验证SBL1到TCM中。这里的TCM可以理解为CPU的二级缓存。这里做一个猜测,既然PBL能够从boot device中加载SBL1,那PBL应该是初始化过boot device的。
  3. SBL1初始化DDR,并从boot device中加载并且校验如下镜像
    • QSEE或者TZ镜像
    • QHEE镜像
    • RPM_FW镜像
    • APPSBL
  4. SBL1加载并验证完上述镜像后,即将执行权转移到QSEE中,QSEE将设置并初始化一个安全的执行环境。
  5. QSEE通知RPM去执行RPM_FW相关代码
  6. QSEE将执行权转移到APPSBL中,APPSBL也就是我们常说的LK了
  7. LK加载HLOS的kernel,HLOS加载并校验MBA并启动AMSS的modem等镜像

基本的启动流程就这样。总的来说,感觉启动流程和MTK芯片的启动流程有点类似。也是从芯片内部的ROM开始,然后初始化外部设备加载校验TZ,modem之类的镜像,在之后就是执行LK。

代码简单分析

  代码路径为boot_images/core/boot/secboot3/hw/msm8952/sbl1/sbl1.S

首先是导入一些外部符号,这里重要的一个函数是sbl1_main_ctl,最后会跳转到这个函数继续执行。

导入需要使用的外部符号后,真正的执行代码是从sbl1_entry处开始。首先会保存一些从PBL传过来的参数,设置中断运行模式等,最后跳转到sbl1_main_ctl执行。

sbl1_config_table记录在加载后续镜像是需要执行的步骤以及参数,下面简单看一下:

load_qsee_pre_procs

load_qsee_pre_procs也是一个数组,记录要执行的函数:

load_qsee_post_procs

load_qsee_post_procs也是一个数据,记录在加载QSEE镜像后需要完成的工作

boot_config_process_bl

boot_config_process_bl函数就是根据boot_config_process_bl数组内的内容逐个调用boot_config_process_entry来加载完成,另外还要将保存在bl_shared_data里面的参数传递过去供启动的时候使用。

断断续续的写了好久,一方面刚刚接触还不够熟悉,另一方面是因为高通license的问题,也不知道放这些代码会不会被查水表。就这样吧,就当做简单的源码阅读笔记好了。以后再项目中遇到问题再抓出来分析分析好了。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注