【Android SDM660启动流程】- UEFI XBL代码流程分析
一. UEFI XBL
1.1 boot_images代码目录
1.2 UEFI代码执行流程
1.3安全验证)。
1.4Pei(EFI前期初始化)。
1.5 DXE (驱动执行环境) )
1.6 BDS (启动设备选择) )
1.7XBL加载
1.8 rt (运行时间) )。
首先来看看SDM660芯片的冷启动流程,设备开机后,先跑的是APPS PBL,然后运行XBL SEC、XBL Loader,用Loader引出XBL CORE APPSBL,最后进入HLOS
让我们来看一下这些相关模块的大致功能。
应用程序权限加载器(apps PBL ) )。
PBL启动时,CPU仅开启第一个核心CPU Core 0,并在ROM中运行固件。 这部分是高通量写入芯片而死的固件,外部开发者无法修改这部分。
主要功能如下。
)1)初始化系统的安全环境,以使后续的XBL的APPS正常工作。
2 )根据引导gpio的配置,选择从哪个设备引导操作系统(Nand、USB等)。
)3)通过检测GPIO判断是否进入嵌入式下载模式,用户可以通过文件下载完整的系统镜像。
)4)用L2 TCM加载XBL1 ELF、OCIMEM和rpm代码。
可扩展引导加载器(xbl ) )。
我们从XBL开始执行了我们编译并下载到eMMC/UFS的系统镜像。 XBL中主要是与初始化相关的硬件环境和代码安全环境。
)1)初始化Buses、DDR、Clocks和CDT,并启动QSEE、QHEE、RPM_FW和XBL core images。
)2)启用内存清理和共享(系统死机时内存清理)、看门狗、内存清理等功能。
)3) USB驱动器初始化、USB充电功能、温升检测、PMIC驱动器初始化、DDR training模块。
XBLcore(uefiorlk,ABL ) )。
XBL core是以前的引导加载器,主要功能是初始化display驱动程序,提供快速引导功能,引导到HLOS kernel。
请注意,在ABL中,也只有CPU核心0在运行。 其他CPU核心进入HLOS Kernel后开始初始化并生效。
本文侧重于可扩展引导加载器(xbl ),主要学习UEFI XBL体系结构和UEFI XBL代码流程。
一. UEFI XBL
1.1 boot_images代码目录
UEFI XBL代码路径是SDM 660 _ Androidsnapdragon-amssboot.xf.1.4boot _ images
# SDM 660 _ Androidsnapdragon-amssboot.xf.1.4boot _ images
ArmPkg---- ARM体系结构相关的Protocols
ArmPlatformPkg---- ARM开发板相关的UEFI代码
basetools-- -编译与edk和EDK2相关的工具。 例如
嵌入式pkg----
FatPkg
IntelFrameworkModulePkg
IntelFrameworkPkg
MdeModulePkg
MdePkg
qo mpkg-- -高通定制的相关pkg,如display和usb充电
壳牌pkg----uefi壳牌环境
1.2 UEFI代码执行流程
从图中可以看到,UEFI代码的执行过程如下。
安全验证(SEC ) Pei ) EFI前期初始化(dxe )驱动运行时环境(BDS )引导设备选择(uefiloader )操作系统加载前期(rt )运行时)。
然后根据该流程分析UEFI代码。
1.3安全验证)。
SEC的汇编代码入口位于以下位置:
在amssboot.xf.1.4boot _ imagesqcom pkgxbl corea arch 64module entry point.masm的_ModuleEntryPoint中
SEC的c代码入口位于以下位置:
在amssboot.xf.1.4boot _ imagesqcom pkgxbl coresec.c的CEntryPoint上
1.4Pei(EFI前期初始化)。
在amssboot.xf.1.4boot _ imagesmdemodulepkgcorePeiPei main Pei main.c的PeiCore中
1.5 DXE (驱动执行环境) )
DXE的加载位置如下。
在amssboot.xf.1.4boot _ imagesembedded pkglibraryprep ilib prep ilib.c的LoadDxeCoreFromFv中
DXE的条目代码位于以下位置:
在amssboot.xf.1.4boot _ imagesmdemodulepkgcoredxedxemain dxe main.c的dxe main中
1.6 BDS (启动设备选择) )
代码在:
在amssboot.xf.1.4boot _ imagesqcom pkgdriversBDS dxe BDSentry.c的BDS entry中
代码在:
在amssboot.xf.1.4boot _ imagesqcom pkgdriversqcom BDS qcom BDS.c的BdsEntry中
1.7XBL加载
代码在:
amssboot.xf.1.4boot _ imagesqcom pkgxbl loaderboot _ loader.c
1.8 rt (运行时间) )。
代码在:
在amssboot.xf.1.4boot _ imagesmdemodulepkgcoreruntime dxeruntime.c的RuntimeDriverInitialize中
参考:
《80_P2484_117_B_UEFI_With_XBL_On_MSM8998_SDM660_SDM.pdf》
3359 blog.csdn.net/u 014089131/article/details/73617716
3359 blog.csdn.net/jlg cumt/article/details/104842586
3359 blog.csdn.net/jlg cumt/article/details/104814931
3359 blog.csdn.net/jlg cumt/article/details/104836900
3359 blog.csdn.net/jlg cumt/article/details/104790690
3359 blog.csdn.net/jlg cumt/article/details/104756673