我的NPI项目之设备系统启动(七) -- 高通OS启动阶段和镜像分区简析

本文详细介绍了QCM4490平台在启动过程中遇到的专业术语,如PBL、SBL、XBL、UEFI等,以及它们在启动流程中的作用,包括不同阶段的分区镜像和代码执行。同时,强调了定制启动时与QCOM合作的重要性。
摘要由CSDN通过智能技术生成

每当有新的平台起来的时候,大概率会伴随着新系统的发布,无论是高通的还是Google Andorid的。在做平台Bringup阶段总会遇到各种各样的专业术语。例如,总是会听到有人说PBL,SBL,XBL,UFEI,Bootloader,Kernel,Android 等等。这些是说的启动的不同阶段呢,还是指不同的分区镜像呢?今天就以QCM4490为例,简单做一下解释和区分。

分区(镜像)名称

xbl,xbl_s.melf

xbl config,xbl_config.elf

uefi,uefi.elf

QSEE/TrustZone,tz.img

super,super.img

vendor,vendor.img

system,system.img 

启动不同阶段

启动过程:

详细内容:

  1. PBL 阶段
    1. 黑色块表示具体的ROM,TME也是开机 最初阶段进行运行的firmware,TME全称为Trust Managerment Engine,以看名字就知道与安全有关。通常是为开机提供Rot和一套验证机制。蓝色块代表了不同阶段的执行程序,e.g 各种loader。
    2. PBL(Primary Boot Loader)负责枚举启动方式和加载SBL(Secondary Boot Loader)镜像。
      PBL is a rom-based bootloader and there isn't any log such as UART can be catched by external device, so the best way to debug PBL is JTAG with Trace32
    3. 如果启动失败,PBL会创建一个虚拟端口9008供镜像下载。
    4. PBL还会检查BootOption GPIO或fuse来确定当前的启动方式,如通过USB或Flash EMMC或者UFS启动。
  2. SBL阶段 (高通新平台用xbl sc替换,Android12之前都还有)
    1. SBL(Secondary Boot Loader)镜像从EMMC/UFS加载并进行校验。
    2. SBL负责将镜像分配到不同的内存区域,如RPM Code RAM。
    3. SBL还负责处理电源、休眠唤醒时钟等相关管理任务。
  3. XBL SC阶段
    1. XBL system controller, 用于加载XBL镜像(xbl  loader),提供XBL config,并将执行移交到xbl。主要功能是setup xbl运行环境,e.g bus/ DDR / clocks / Charger and CDT 有关的设定。xbl sc的代码通常是不可以更改的,通常是release的二进制镜像文件,俗称xbl_sc(但是它不是一个单独的img,而是被包裹在xbl_s.melf分区中)。如果,我们需要在xbl_sc中进行修改代码,通常做法是提QCOM case。例如,同一套代码在不同设备上启动,并且要选择不同的XBL config, 那么我们就必需要改动XBL SC进行选择。但是这样,会带来一个问题,就是每次codebase升级,我们都需要进行提QCOM case寻求帮助。
      所以,这里有个教训就是,在我们需要启用新平台时候,需要进行和Qcom TAM进行设计确认。提出我们的需求,请高通实现。这个对架构师的要求比较高,需要看的远才行。
    2. XBL SC loads SHRM image from the boot device and TME authenticates and brings it out of reset. 
    3. XBL SC loads AOP CFG and AOP image from the boot device and TME authenticates and brings AOP out of reset.
    4. XBL SC loads CPUCP firmware image from the boot device and TME authenticates it.
    5. XBL SC loads TZ device configuration (DEVCFG) image and Qualcomm TEE image from the boot device and TME authenticates it.
    6. ...
    7. xbl sc是高通签名的一个镜像文件,是否会影响release的bootup?
      答案是不会,因为我们会重签。
    8. XBL config的主要内容有哪些?xbl_config.elf
      1. 包含了CDT,这个很重要,现在高通不希望我们改动CDT了,他的code是IDP的CDT,release给我们的code有而是基于IDP开发的。关于CDT的细节可以参考我的NPI项目之设备系统启动(一) -- 客制化/给设备身份的CDT-CSDN博客
      2. PMIC, DDR and XBL device tree。
  4. XBL阶段 
    1. XBL(Extended Boot Loader)阶段,用于对硬件环境进行初始化,但这些通常与高通特定的技术相关,且可能不会出现在所有的高通平台上。
    2. 从XBL sc切换到XBL core, which is known as UEFI.
  5. UEFI 阶段
    1. UEFI mounts and runs ABL firmware volume (FV), which has Fastboot and Linux loader applications.
    2. 进行charging有关的设定和初始化,能够启动ADSP中支持PD快充
    3. pre-charge/quick charge/
  6. ABL阶段
    1. ABL的入口代码位于Linuxloader.c,其入口函数是Linuxloaderentry().
    2. Linux loader application (part of ABL FV) loads and authenticates the HLOS kernel with verified boot, jumps to HLOS. The HLOS runs at nonsecure EL1 mode.
  7. Kernel 阶段
    1. 从EMMC/UFS 中获取boot.img并加载到指定的内存区域。
    2. 加载内核、ramdisk、devicetree等组件到指定地址,然后引导kernel。
    3. 内核启动入口在head.S中,最终调用的函数是start_kernel,位于main.c中。
  8. Android 阶段
    1. init 经常创建孵化器进程,孵化器进程再逐个的创建Android运行时的service。显示界面,进入Android;

当我们熟悉了分区和阶段之后,在bringup主板阶段,就可以很好的区分,代码执行到哪个阶段了,具体位于哪个分区代码中。

--熟悉启动,定制启动。

  • 20
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值