【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 代码流程分析相关推荐

  1. android 反编译报错,android反编译

    常用反编译方法: 1.先将.apk改为.zip或者.rar用winrar加压得到classes.dex文件 2.用dex2jar工具将.dex转为.jar,然后用jd-gui就可以打开.jar查看源文 ...

  2. android 库编译报错,Android Studio编译项目报错

    编译项目时报以下错误: Error:Execution failed for task ':app:dexDebug'. > mon.internal.LoggedErrorException: ...

  3. 【错误记录】Android Studio 编译报错 ( Could not determine java version from ‘11.0.8‘. ② | 升级 Gradle 版本 )

    文章目录 一.报错信息 二.解决方案 解决 Could not determine java version from '11.0.8'. 问题 , 有两种方案 , 方案一 : Android Stu ...

  4. 【错误记录】Android Studio 编译报错 ( SDK location not found )

    文章目录 一.报错信息 二.解决方案 一.报错信息 Android Studio 编译报错 : 首次打开别人的项目 , 经常性的报错 ; Could not determine the depende ...

  5. 【错误记录】Android Studio 编译报错 ( A problem occurred starting process ‘command ‘ninja.exe‘ ‘ )

    文章目录 一.报错信息 二.解决方案 一.报错信息 Android Studio 编译报错 : FAILURE: Build failed with an exception.* What went ...

  6. android 编译报错,android avc 编译报错neverallow问题查找

    android avc 编译报错neverallow问题查找 2020年08月11日 | 萬仟网移动技术 | 我要评论 在修改avc后,有时候编译会报错neverallow.这个具体是在什么地方定义的 ...

  7. android 项目编译报错 符号: 类 shape 位置: 程序包 android.widget

    错误 android 项目编译报错 符号: 类 shape 位置: 程序包 android.widget 详细错误 Compiling with JDK Java compiler API. D:\A ...

  8. Android Studio编译报错:“ java.lang.OutOfMemoryError: Java heap space”

    前言: 最近换了工作,到了新东家,厂子大了,人也多了,希望在新的环境中不断成长.在上家公司电脑是最好的,新的公司就是一般配置,内存只有8G,因此Android Studio3.5编译报错:java.l ...

  9. 【错误记录】Android Studio 编译报错 ( Deprecated Gradle features were used in this build, making it incompat )

    文章目录 一.报错信息 二.解决方案 一.报错信息 使用 Android Studio 编译比较老的 Android 项目时 , 报如下错误 : FAILURE: Build failed with ...

最新文章

  1. Nginx的配置文件
  2. android listview万能适配器
  3. Python 技术篇-requests发送post请求传文件给flask服务端报405、400问题解决方法
  4. 平台电商类的增长策略:从用户激励到养成类游戏
  5. linux zip打包_还在百度Linux命令?推荐一套我用起来特顺手的命令!(JAVA)
  6. 利用微软平台生成报表,线性图,柱形图
  7. mysql动态扩展_动态可扩展查询MYSQL5.7JSON+虚拟列+Mybatis
  8. ENSP配置 实例十一 综合实验
  9. zoj 2526(一道很好的最短路应用题)
  10. 电子助力方向机控制模块_17款路虎揽胜:偶发性电子助力失效
  11. Oracle修改globalname,oracle修改global_name和service_name
  12. springcloud 分布式配置中心 config server config client
  13. 阶段3 1.Mybatis_05.使用Mybatis完成CRUD_7 Mybatis中参数的深入-使用实体类的包装对象作为查询条件...
  14. 语义表示——神经网络与深度学习
  15. 普通二极管伏安特性和肖特基二极管电压电流特性
  16. c语言中四种简单的数组排序
  17. Markdown、.bib、LaTeX + Typora、Pandoc 管理论文参考文献
  18. ERP100人物.第25期【风里来云里去兮,风行天下志更坚】 风云子
  19. MacBookPro你真的会使用吗?
  20. 甲骨文数据库基本知识

热门文章

  1. 路由器老掉线的原因之一
  2. python 爬虫 网易云音乐 抓取
  3. 淘宝商城 入住费用
  4. Word文档方框中输入“√”、“×”的简单方法,绝对让你相见恨晚!
  5. Linux故障之内核反向路由检测
  6. 协同办公风口来袭,在线文档顺势崛起!
  7. 基于Php美妆化妆品商城购物网站
  8. 云服务器有什么用途?新手如何使用云服务器
  9. html文本框打tab,HTML标签textarea支持tab键
  10. PHP语言系列API接口,按关键词搜索商品列表