高通平台开发板学习教程

 

这一部分要求了解芯片的内部架构,启动模式,启动过程中代码执行的顺序等。

一、处理器的核心

1、APPS :运行Android

2、RPM:主要用于低功耗应该

3、Modem:高通自有指令集处理器,处理3G、4G通信协议等

4、Pronto:处理蓝牙、WiFi

5、LPASS(ADSP):处理音频

 

二、启动过程

1、相关image介绍

(1)、PBL(Primary Boot Loader) 位于rom中,是芯片上电后执行的真正第一行代码,在正常启动流程中会加载SBL1。如果启动异常会虚拟出9008端口用于紧急下载(一般是拨某个开关进入紧急下载模式,在该模式下将板子连接电脑,在电脑上可以看到9008端口的样式,可用QFIL救砖)。

(2)、SBL1(Second BootLoader stage 1) 位于eMMC中,由PBL加载,初始化buses、DDR、clocks等,会虚拟出9006端口,用于不能开机时dump ram

(3)、QSEE/TrustZone 安全相关,如fuse

(4)、DEVCFG OEM配置信息(如OEMLock)

(5)、 Debug Policy 调试相关

(6)、 APPSBL 即为BootLoader,目前使用LK(littlekernel)(7)、HLOS(High LevelOperating System) 即为Linux/Android

(8)、Modem PBL 即为Modem处理器的PBL

(9)、MBA(Modem BootAuthenticator) Modem处理器启动鉴权

2、启动流程

1, 系统上电,\开发板从上电复位开始运行。

2, 在APPS中运行的PBL会加载:

a, 从启动设备(如eMMC、UFS)加载SBL1 segment1到L2(即为TCM)

b, 加载SBL1 segment2到RPM处理器的RAM中。

3, SBL1 segment1会初始化DDR,然后完成如下加载:

a, 从启动设备加载QSEE image到DDR

b, 从启动设备加载DEVCFG image到DDR

c, 从启动设备加载Debug Policy image到DDR

d, 从启动设备加载HLOS APPSBL image到DDR

e, 从启动设备加载RPMfirmware image到RPM的RAM中。

4, SBL1移交运行控制权给QSEE。QSEE建立安全运行环境,配置xPU,支持fuse。

a, SBL1运行在AArch32(译者注:名词相关知识见文末“附件介绍一”)模式,而QSEE运行在AArch64模式。为了切换到AArch64模式,SBL1会启动重映射器,操作RMR寄存器,然后触发warm-reset,QSEE就能够运行在AArch64模式了。

5, QSEE通知RPM启动RPM 固件的执行。

6, QSEE移交运行控制权给HLOS APPSBL。

a, APPSBL只能在AArch32模式开始运行。

b, 这时AArch32的运行模式切换是在EL3/Monitor模式(译者注:名词相关知识见文末“附件介绍二”)完成的。通过查看APPSBL的ELF头能够得知其需要运行在32位指令集架构下。EL3/Monitor模式改变到32位模式,然后再启动APPSBL。

7, APPSBL加载、验证kernel。APPSBL通过SCM调用改变到HLOS kernel需要的AArch64模式。这和之前LK直接跳转到kernel运行是不同的。

8, HLOS kernel通过PIL加载MBA到DDR

9, HLOS kernel对Hexagon modem DSP进行解复位。

10,Modem PBL继续它的启动。

11,HLOS kernel 通过PIL加载AMSS modemimage到DDR

12,Modem PBL验证MBA然后跳转到MBA。

13,HLOS通过PIL加载WCNSS(Pronto)image到DDR

14,HLOS对WCNSS(Pronto)进行解复位以便Prontoimage开始执行。

15,HLOS通过PIL加载LPASS image到DDR

16,HLOS对LPSAA进行解复位以便LPASSimage开始执行。

3、关于eMMC和DDR的初始化时间问题

从上面的描述中已经可以看清,为避免迷惑,在分离出来看看:

1,PBL中是含有eMMC驱动的,有访问eMMC的能力,自身运行在MCU内部SRAM中。

2,除了PBL程序的img在MCU片内ROM外,其余img均存储在eMMC中。

3,PBL首先从eMMC加载SBL1到L2(内部缓存并非DDR),SBL1同样运行在片内SRAM。

4,有SBL1初始化DDR各种时序后,DDR自此可用(eMMC一直可用)

5,再由SBL1加载其余各个img到DDR,然后按照linux的正常顺序启动

 

来源:https://blog.csdn.net/RadianceBlau/article/details/73229005

你可能感兴趣的:(学习教程)