【SA8295P 源码分析】03 - SA8295P QNX Host上电开机流程分析
- 一、阶段1 固件开机自检 (SM BIST):APPS PBL加载XBL后触发 INT_RESET进行Warm Reset
- 二、阶段2 固件开机自检 (SM BIST):加载TZ,初始Hypervisor,启动QNX Kernel,加载并启动各子系统
系列文章汇总见:《【SA8295P 源码分析】00 - 系列文章链接汇总》
本文链接:《【SA8295P 源码分析】03 - SA8295P QNX Host 上电开机流程分析》
一、阶段1 固件开机自检 (SM BIST):APPS PBL加载XBL后触发 INT_RESET进行Warm Reset

-
1 . 按下开机键,触发复位信号,高通
®Kryo™CPU Gold core 0核 心CPU0退出Reset状态,开始执行APPS PBL
初始化硬件(定时器、PRNG、时钟等等),启用caches缓存和MMU,并根据BOOT PIN配置检测引导设备:
默认启动设备为:UFS Extern Storage外置存储
默认启动选项:被EDL cookie覆盖 或 通过USB GPIO强制配置 -
2a .
APPS PBL从引导设备bootdevice加载并验证XBL Loader镜像(region #1)到Boot IMEM中。 (xbl_a分区中的xbl.elf镜像) -
2b .
APPS PBL从引导设备bootdevice加载并验证XBL SDI镜像(region #2)到OCIMEM中(片上内部存储器On-Chip Internal Memory) -
2c .
APPS PBL从引导设备bootdevice加载XBL SEC镜像(region #0)到Boot IMEM中,(xbl_sec分区中的xbl_sec.mbn镜像)
XBL SEC是一个QC签名的ELF代码段,用于锁定xPUs -
3 .
XBL SEC跳到XBL并将CPU控制 从Secure EL3安全等级3环境 切换到Non-Secure EL1非安全等级1环境 -
4a . 在阶段
1引导中,XBL执行SMSS MBIST进行内存自检(Memory BIST)和SMSS LBIST进行逻辑自检(Logic BIST),
加载并验证SMSSCSM内存中的SMSS FW固件,并Reset SMSS触发SMSS运行,
然后AP(XBL Loader)将CPU控制权移交给SMSS(安全管理) (smss_a中的smss.elf镜像),并进入WFI待机模式 (standby模式Wait For Interrupt)。
此时,SMSS将分别在AP、IMEM、LLCC、SMMU、GEMNOC这些区域上执行BIST内存自检。 -
5 . 自检完成后,在没有
PMIC的情况下,整个芯片触发INT_RESET,进行Warm Reset操作
之所以进行Warm Reset,是保持供电,以便保持之前初始化过的一些TCSR寄存器和SMSS IMEM/registers的状态。
二、阶段2 固件开机自检 (SM BIST):加载TZ,初始Hypervisor,启动QNX Kernel,加载并启动各子系统

在阶段一中,整个芯片启动 INT_RESET,启动warm reset ,此时,APPS PBL 代码会重新跑一遍。
详细过程如下:
-
2a .
APPS PBL从引导设备bootdevice加载并验证XBL Loader镜像(region #1)到Boot IMEM中。 (xbl_a分区中的xbl.elf镜像) -
2b .
APPS PBL从引导设备bootdevice加载并验证XBL SDI镜像(region #2)到OCIMEM中(片上内部存储器On-Chip Internal Memory) -
2c .
APPS PBL从引导设备bootdevice加载XBL SEC镜像(region #0)到Boot IMEM中,(secdata分区中的sec.dat)
XBL SEC是一个QC签名的ELF代码段,用于锁定xPUs -
3 .
XBL SEC在EL3模式下运行Security Configuration启动SMSS(smss_a中的smss.elf镜像),然后跳转到EL1非安全环境 并运行XBL Loader。 -
4 .
XBL Loader将CPU控制权移交给SMSS并进入WFI模式。
SMSS将分别在DPU、Camera、CamNoc、NSP、Ethernet以太网、PCIe上执行BIST,
自检完毕后,将CPU控制权交回给XBL Loader,
接着XBL Loaders继续正常的冷启动流程 -
4b .
XBL Loader加载和校验XBL Config镜像到BOOT IMEM中 (xbl_config_a分区中的xbl_config.elf镜像) -
4c .
XBL Loader加载Shrm镜像到Code RAM中(shrm_a分区中的shrm.elf镜像) -
4d .
XBL Loader加载并验证MISC镜像到BOOT IMEM中 -
4e .
XBL Loader从引导设备boot device加载并验证AOP镜像 到AOP CodeRAM中 (aop_a分区中的aop.mbn镜像) -
4f .
XBL Loader触发AOP实时响应处理器Reset,开始AOP CodeRAM中跑AOP代码 -
4g .
XBL Loader加载并验证QSEE镜像到pIMEM中(tz_a分区中的tz.mbn) -
4h .
XBL Loader加载并验证QHEE镜像(hyp_a分区中的mifs_hyp_la.img镜像,用于hypervisor虚拟化) -
4i .
XBL Loader从XBL镜像中加载并验证UEFI Segment代码段 -
4j .
XBL Loader从跳转到XBL_SEC,由XBL_SEC将CPU交到QSEE(TrustZone)手中 -
5 .
QSEE(TZ)将CPU转交到QHEE(hypervisor),高通Hypervisor运行在EL2模式,QHEE配置SMMUs,并提供虚拟化服务 -
6 . 高通
Hypervisor执行XBLcore代码(位于region #3中),它是在Non-sec EL1非安全模式下运行的,
UEFI外围镜像加载器(UEFI peripheral image loader (PIL))挂载并运行ABL firmware volume(FV)固件(abl_a中的abl_fastboot.elfabl.elf),其中包含Fastboot和Linux Loader应用程序 -
7 .
Linux Loader应用程序(位于abl.elf镜像)通过verified boot加载并验证HLOS Kernel镜像(对应boot_a中的boot_la.img,它是QNX Host Kernel微内核),HLOS Kernel运行在Non-Sec EL1模式下 -
8 .
HLOS PIL driver (QNX)将所有子系统Iris FW、Camera FW、Audio FW、Sensor FW、Turing FW、Deep Learning FW的镜像加载到DDR,并相应的配置时钟和电源。HLOS PIL driver (QNX)执行对QSEE (TrustZone)的SCM系统调用,以请求一个安全的PIL driver,用于验证各子系统的镜像,然后 高通Hypervisor触发每个子系统进行Reset启动
注意,此时只是 QNX Host 启动起来了,运行在 EL1 环境中,IVI Android Guest 还没启动呢,GVM 是运行在 EL0 中的


















