说明:
本文讲解了关于MSM8937 / MSM8953 MSM8940 / MSM8920 / MSM8917
芯片组启动架构的概述
处理器启动地址
下面表格包括了MSM8937/MSM8953//MSM8940/MSM8920/MSM8917
芯片组包含的处理器.
处理器类型和启动地址.
子系统/处理器
处理器
启动地址
APPS
Applications
应用
Cortex-A53
0x00100000*
RPM
Resource power Manager
资源功耗管理
Cortex-M3
0x00200000(子系统的视角)
0x0(系统的视角)
Modem
基带
MSS_QDSP6
可配置的*
WCNSS (Pronto)
ARM9
0x0 or 0xFFFF0000 or 硬件重新映射*
LPASS
低功耗音频子系统
(ADSP)
LPASS_QDSP6
可配置的*
LPASS
*系统和子系统视角中的引导地址没有变化
启动调用堆栈
TCM
:Tightly-Coupled Memory,紧耦合内存
Some ARM SoCs have a so-called TCM (Tightly-Coupled Memory). This is usually just a few (4-64) KiB
of RAM inside the ARM processor.
一些arm socs所谓的TCM(紧耦合的内存),通常是指ARM处理器内部的几个仅有(4
- 64)kb RAM
CDT:
Configuration Data Table,包含CDB0: platform info信息和CDB1: DDR配置参数。
PIL:Peripheral
image loader 外围设备镜像加载器
HLOS:
High-level operation system,高级操作系统,指包括Linux内核在内的整个Android系统
组成
基于处理器
加载自
执行在
功能
Application processor primary boot loader
(APPS PBL)
应用处理器PBL
芯片内部代码
Cortex-A53
(AArch32)
NA
APPS ROM
§启动设备和接口检测
§紧急下载模式支持
§加载并验证SBL1镜像片段在L2TCM和RPM code RAM
Loads andauthenticates SBL1 ELF segments across L2TCMand RPM code RAM
Secondary boot loader stage 1 (SBL1)
二级引导加载程序阶段1
sbl1.mbn
Cortex-A53
(AArch32)
eMMC
L2 TCM
(分段1)
L2 TCM
初始化内存子系统 (buses, DDR, clocks, and CDT)
§加载/鉴定TrustZone, DEVCFG, RPM_FW, APPS BL 镜像(lk), memory dump 通过 USB 2.0 和 Sahara
§看门狗调试保留, 比如, L2 刷新
§RAM dump到eMMC/SD的支持, USB driver 的支持, USB 充电,温度检测, PMIC driver 的支持, 配置 DDR, and 刷新 L1/L2/ETB到崩溃调试
§支持相关的配置
OCIMEM(不懂)
-
RPM code RAM
(分段2)
RPM code RAM
QSEE/TrustZone
tz.mbn
Cortex-A53
(AArch64)
eMMC
LPDDR3
相当于 TZBSP
§建立安全运行环境,
§配置 xPU,
§支持 fuse driver
§验证一些子系统镜像
§添加异常复位调试功能
DEVCFG
devcfg.mbn
Cortex-A53
(AArch64)
eMMC
LPDDR3
§OEM配置数据, 比如, xPU 配置
§PIL 加载镜像区
Debug policy1
(不知道是什么)
Cortex-A53
(Aarch32)
eMMC
LPDDR3
商业安全设备上启用调试
Resource Power Manager Firmware (RPM_FW)
rpm.mbn
Cortex-M3
eMMC
RPM code RAM
资源功耗管理
APPSBL/boot manager and OS loader
emmc_appsboot.mbn
Cortex-A532
(AArch32/
AArch64)
eMMC
LPDDR3
显示开机第一张图, 加载和验证kernel (实指linux kernel), and
提供使用UEFI HLOS-specific引导加载程序的功能
High-Level Operating System (HLOS)
boot.img
system.img
userdata.img
...
Cortex-A53
(AArch32/AArch64)
eMMC
LPDDR3
Boots HLOS images, for example, A53 HLOS kernel image, WCNSS (Pronto) image, and so on.
Modem Primary Boot Loader (Modem PBL)
芯片内部代码
MSS_QDSP6
NA
Modem ROM
Qualcomm® Hexagon™ TCM
(data and stack)
§创建 Hexagon TCM
§从LPDDR3拷贝MBA到Hexagon TCM, 然后在Hexagon TCM中鉴定MBA
Modem Boot Authenticator (MBA)
NON-HLOS.bin
MSS_QDSP6
eMMC
Hexagon TCM
§鉴定modem固件
§xPU protects the DDR regions for modem, and memory dump
1Debug policy固件是SBL可选择加载的固件.
更多信息参考Debug Policy Version 2 User Guide
(80-NV396-72).
2LK boot loader starts in 32-bit.
启动流程
1. 系统上电 ,让MSM8937/MSM8953/MSM8940/MSM8920应用处理器CPU复位.
2. APPS PBL在Cortex-A53上运行, 加载并校验 SBL1
a.SBL1 segment 1 from the boot device to L2 (as TCM).
b.SBL1 segment 2 (SDI equivalent) to RPM code RAM, then jumps to SBL1.
3. SBL1 segment 1 初始化DDR 并加载和校验以下内容:
a.QSEE/TrustZone镜像从启动设备到DDR.
b.DEVCFG镜像从启动设备到DDR.
c.Debug Policy镜像从启动设备到DDR.
d.HLOS APPSBL(lk)镜像从启动设备到DDR.
e.RPM firmware镜像从启动设备到RPM code RAM.
4. SBL1将执行权交给QSEE/TrustZone. QSEE/TrustZone建立安全环境, 配置 xPU, 支持the fuse driver.
a.SBL1运行在32位模式. QSEE/TrustZoneruns运行在64位模式. 因为64位模式转变, SBL1 为QSEE入口设置加载重新映射, 写入RMR register,然后触发热启动. QSEE这时运行在64位模式.
5. QSEE 通知RPM处理器来启动RPM固件执行.
6. QSEE 将执行权限交给HLOS APPSBL(lk)来初始化系统.
a.The Linux APPS boot loader (HLOS APPSBL) 一开始仅执行在32位模式下.
b.这种做法是通过EL3/Monitor模式,通过查看ELF头对于HLOS APPSBL, 这表明它使用32位指令集架构. EL3/Monitor改变为32-bit模式并使得HLOS APPSBL执行在32-bit模式.
7. HLOS APPSBL(lk)加载并校验HLOS kernel(Linux内核). LK通过在退出前使SCM调用安全监视器表明HLOS kernel64位模式. LK不像以前那样直接跳进内核.
8. HLOS kernel加载MBA到DDR通过PIL.
9. HLOS kernel带来Hexagon modem DSP重置.
10. Modem PBL然后继续它的启动过程.
11. HLOS kernel加载AMSS modem镜像到DDR通过PIL.
12. Modem PBL校验MBA然后跳转到它.
13. HLOS加载WCNSS (Pronto)镜像到DDR通过PIL.
14. HLOS使WCNSS (Pronto)镜像重置,因此Pronto镜像开始执行.
15. HLOS加载LPASS镜像到DDR通过PIL.
16. HLOS使得LPASS镜像重置,LPASS镜像开始执行.
注:本文大部分翻译自高通文档