android加载efi分区,高通Android UEFI XBL 代码流程分析

本文详细分析了高通Android UEFI XBL的启动流程,包括APPS PBL、XBL和XBL core(UEFI或LK)的职责。重点介绍了UEFI XBL的代码目录结构和执行流程,从SEC安全验证到DXE驱动执行环境,再到BDS启动设备选择。同时,阐述了UEFI代码在不同阶段的主要任务,如初始化硬件、设置安全环境、加载配置文件等。
摘要由CSDN通过智能技术生成

高通Android UEFI XBL 代码流程分析

背景

之前学习的lk阶段点亮LCD的流程算是比较经典,但是高通已经推出了很多种基于UEFI方案的启动架构。

所以需要对这块比较新的技术进行学习。在学习之前,有必要了解一下高通UEFI启动流程。

参考文档:80_P2484_117_B_UEFI_With_XBL_On_MSM8998_SDM660_SDM

总览

先来看下SDM660芯片冷启动的流程。可以看出,在设备上电后,先跑的是 APPS PBL,接着运行XBL SEC、XBL Loader,通过Loader引出XBL CORE APPSBL,最后进入HLOS。

我们来看下这几个涉及的模块大概功能:

1、Application primary boot loader (APPS PBL)

PBL 启动时,CPU只开启了第一个核心 CPU Core 0,运行固件在ROM中,这部分是高通写死在芯片中的固件,外部开发人员是无法修改这部份的。

主要功能为:

(1)系统安全环境的初始化,以确保后续的XBL中的APPS 能够正常运行。

(2)根据boot gpio的配置选择从什么设备启动操作系统(如 Nand,USB等)。

(3)通过检测GPIO判断是否进入Emergency Download mode,用户可以通过FILE来下载完整的系统镜像。

(4)通过L2 TCM来加载XBL1 ELF,OCIMEM 和 RPM CodeRAM 代码。

2、Extensible boot loader (XBL)

从XBL开始,跑的就是我们编译下载进eMMC/UFS的系统镜像了,在XBL中主要是初始化相关的硬件环境,及代码安全环境。

(1)初始化 Buses、DDR、Clocks、CDT,启动QSEE,QHEE,RPM_FW, XBL core images。

(2)使能memory dump through USB and Sahara(系统死机时memory dump),看门狗,RAM dump to SD support等功能。

(3)初始化 USB驱动,USB充电功能,温升检测,PMIC驱动初始化,和 DDR training模块。

3、XBL core (UEFI or LK,ABL)

XBL core,就是之前的bootloader,主要功能就是初始化display驱动,提供fastboot功能,引导进入HLOS kernel操作系统。

注意,在ABL中,同样也只有CPU Core0在工作,其他的CPU核以是在进入HLOS Kernel后才开始初始化启用的。

本文中,我们重点关注的是Extensible boot loader (XBL),主要来学学UEFI XBL架构,及UEFI XBL代码流程。

一、UEFI XBL

代码目录分析

UEFI XBL代码路径位于:BOOT.XF.1.4\boot_images\

# BOOT.XF.1.4\boot_images

ArmPkg----> ARM 架构相关的Protocols

ArmPlatformPkg----> ARM 开发板相关的UEFI代码

BaseTools----> 编译EDK和EDK2相关的工具,如

EmbeddedPkg---->

FatPkg

IntelFrameworkModulePkg

IntelFrameworkPkg

MdeModulePkg

MdePkg

QcomPkg----> 高通定制的相关pkg,如display和usb充电都在里面

ShellPkg----> UEFI shell 环境

UEFI代码运行流程

从图中可以看出,UEFI代码运行流程为:

SEC(安全验证)--->PEI(EFI前期初始化)--->DXE(驱动执行环境)--->BDS(启动设备选择)--->UEFI Loader(操作系统加载前期)--->RT(Run Time)。

接下来,我们根据这个流程来分析下UEFI代码。

SEC (安全验证)

SEC的汇编代码入口位于:

BOOT.XF.1.4\boot_images\QcomPkg\XBLCore\AARCH64\ModuleEntryPoint.masm的 _ModuleEntryPoint中

入口汇编代码分析

分析看看ModuleEntryPoint.masm 这个文件

该汇编代码中,主要工作为:

1、关闭所有中断

2、关闭MMU和Caches

3、关闭TLB缓存表

4、获得当前运行的安全环境:EL1、EL2、EL3

5、初始化ELX 安全环境

6、使能 Cache

7、初始化栈

8、调用 CEntryPoint,传参 _StackBase(0x80C00000)、_StackSize(0x00040000)

#inc

  • 1
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值