android uefi 编译报错,【Android SDM660开机流程】- UEFI XBL 代码流程分析
【Android SDM660开机流程】- UEFI XBL 代码流程分析
一、UEFI XBL
1.1 boot_images代码目录
1.2 UEFI代码运行流程
1.3 SEC (安全验证)
1.4 PEI (EFI前期初始化)
1.5 DXE (驱动执行环境)
1.6 BDS (启动设备选择)
1.7 XBL Loader
1.8 RT(Run Time)
先来看下SDM660芯片冷启动的流程,可以看出,在设备上电后,先跑的是 APPS PBL,接着运行XBL SEC、XBL Loader,通过Loader引出XBL CORE APPSBL,最后进入HLOS。
我们来看下这几个涉及的模块大概功能:
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 代码。
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模块。
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
1.1 boot_images代码目录
UEFI XBL代码路径位于:SDM660_Android\snapdragon-amss\BOOT.XF.1.4\boot_images\
# SDM660_Android\snapdragon-amss\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 环境
1.2 UEFI代码运行流程
从图中可以看出,UEFI代码运行流程为:
SEC(安全验证)--->PEI(EFI前期初始化)--->DXE(驱动执行环境)--->BDS(启动设备选择)--->UEFI Loader(操作系统加载前期)--->RT(Run Time)。
接下来,我们根据这个流程来分析下UEFI代码。
1.3 SEC (安全验证)
SEC的汇编代码入口位于:
amss\BOOT.XF.1.4\boot_images\QcomPkg\XBLCore\AARCH64\ModuleEntryPoint.masm的 _ModuleEntryPoint中
SEC的C代码入口位于:
amss\BOOT.XF.1.4\boot_images\QcomPkg\XBLCore\Sec.c的 CEntryPoint 中
1.4 PEI (EFI前期初始化)
amss\BOOT.XF.1.4\boot_images\MdeModulePkg\Core\Pei\PeiMain\PeiMain.c的 PeiCore 中
1.5 DXE (驱动执行环境)
DXE的加载位置在:
amss\BOOT.XF.1.4\boot_images\EmbeddedPkg\Library\PrePiLib\PrePiLib.c的 LoadDxeCoreFromFv中
DXE的入口代码位于:
amss\BOOT.XF.1.4\boot_images\MdeModulePkg\Core\Dxe\DxeMain\DxeMain.c的 DxeMain中
1.6 BDS (启动设备选择)
代码位于:
amss\BOOT.XF.1.4\boot_images\QcomPkg\Drivers\BdsDxe\BdsEntry.c 的 BdsEntry 中
代码位于:
amss\BOOT.XF.1.4\boot_images\QcomPkg\Drivers\QcomBds\QcomBds.c 的 BdsEntry 中
1.7 XBL Loader
代码位于:
amss\BOOT.XF.1.4\boot_images\QcomPkg\XBLLoader\boot_loader.c
1.8 RT(Run Time)
代码位于:
amss\BOOT.XF.1.4\boot_images\MdeModulePkg\Core\RuntimeDxe\Runtime.c的 RuntimeDriverInitialize 中
参考:
《80_P2484_117_B_UEFI_With_XBL_On_MSM8998_SDM660_SDM.pdf》
https://blog.csdn.net/u014089131/article/details/73617716
https://blog.csdn.net/jlgcumt/article/details/104842586
https://blog.csdn.net/jlgcumt/article/details/104814931
https://blog.csdn.net/jlgcumt/article/details/104836900
https://blog.csdn.net/jlgcumt/article/details/104790690
https://blog.csdn.net/jlgcumt/article/details/104756673
android uefi 编译报错,【Android SDM660开机流程】- UEFI XBL 代码流程分析相关推荐
- android 反编译报错,android反编译
常用反编译方法: 1.先将.apk改为.zip或者.rar用winrar加压得到classes.dex文件 2.用dex2jar工具将.dex转为.jar,然后用jd-gui就可以打开.jar查看源文 ...
- android 库编译报错,Android Studio编译项目报错
编译项目时报以下错误: Error:Execution failed for task ':app:dexDebug'. > mon.internal.LoggedErrorException: ...
- 【错误记录】Android Studio 编译报错 ( Could not determine java version from ‘11.0.8‘. ② | 升级 Gradle 版本 )
文章目录 一.报错信息 二.解决方案 解决 Could not determine java version from '11.0.8'. 问题 , 有两种方案 , 方案一 : Android Stu ...
- 【错误记录】Android Studio 编译报错 ( SDK location not found )
文章目录 一.报错信息 二.解决方案 一.报错信息 Android Studio 编译报错 : 首次打开别人的项目 , 经常性的报错 ; Could not determine the depende ...
- 【错误记录】Android Studio 编译报错 ( A problem occurred starting process ‘command ‘ninja.exe‘ ‘ )
文章目录 一.报错信息 二.解决方案 一.报错信息 Android Studio 编译报错 : FAILURE: Build failed with an exception.* What went ...
- android 编译报错,android avc 编译报错neverallow问题查找
android avc 编译报错neverallow问题查找 2020年08月11日 | 萬仟网移动技术 | 我要评论 在修改avc后,有时候编译会报错neverallow.这个具体是在什么地方定义的 ...
- android 项目编译报错 符号: 类 shape 位置: 程序包 android.widget
错误 android 项目编译报错 符号: 类 shape 位置: 程序包 android.widget 详细错误 Compiling with JDK Java compiler API. D:\A ...
- Android Studio编译报错:“ java.lang.OutOfMemoryError: Java heap space”
前言: 最近换了工作,到了新东家,厂子大了,人也多了,希望在新的环境中不断成长.在上家公司电脑是最好的,新的公司就是一般配置,内存只有8G,因此Android Studio3.5编译报错:java.l ...
- 【错误记录】Android Studio 编译报错 ( Deprecated Gradle features were used in this build, making it incompat )
文章目录 一.报错信息 二.解决方案 一.报错信息 使用 Android Studio 编译比较老的 Android 项目时 , 报如下错误 : FAILURE: Build failed with ...
最新文章
- Nginx的配置文件
- android listview万能适配器
- Python 技术篇-requests发送post请求传文件给flask服务端报405、400问题解决方法
- 平台电商类的增长策略:从用户激励到养成类游戏
- linux zip打包_还在百度Linux命令?推荐一套我用起来特顺手的命令!(JAVA)
- 利用微软平台生成报表,线性图,柱形图
- mysql动态扩展_动态可扩展查询MYSQL5.7JSON+虚拟列+Mybatis
- ENSP配置 实例十一 综合实验
- zoj 2526(一道很好的最短路应用题)
- 电子助力方向机控制模块_17款路虎揽胜:偶发性电子助力失效
- Oracle修改globalname,oracle修改global_name和service_name
- springcloud 分布式配置中心 config server config client
- 阶段3 1.Mybatis_05.使用Mybatis完成CRUD_7 Mybatis中参数的深入-使用实体类的包装对象作为查询条件...
- 语义表示——神经网络与深度学习
- 普通二极管伏安特性和肖特基二极管电压电流特性
- c语言中四种简单的数组排序
- Markdown、.bib、LaTeX + Typora、Pandoc 管理论文参考文献
- ERP100人物.第25期【风里来云里去兮,风行天下志更坚】 风云子
- MacBookPro你真的会使用吗?
- 甲骨文数据库基本知识