高通平台UEFI有关介绍

背景

我需要在高通平台上学习点亮LCD,目前通过同事在别的平台的配置代码,我已经将kernel部分的屏幕点亮了;剩余的工作量就在BP侧,也就是系统刚开机的那一段时间。在开发过程中,我发现我对BP侧的开发有点不太熟悉,因此我需要搞清楚有关的概念。只有搞清楚了这些基本概念,我才能够在后续的工作中不留下隐患。

UEFI 介绍

UEFI(Unified extensible firmware interface)统一的可扩展固件接口,是一种详细描述类型接口的标准。

可扩展固件接口(Extensible Firmware Interface,EFI)是 Intel 为 PC 固件的体系结构、接口和服务提出的建议标准。其主要目的是为了提供一组在 OS 加载之前(启动前)在所有平台上一致的、正确指定的启动服务,被看做是有近20多年历史的 BIOS 的继任者。

BIOS是汇编实现的,采用的是16bit 实模式寻址方式,最大支持的内存只有1M,代码易读性以及实现的功能都受到限制,而且移植起来不方便。BIOS支持的最大磁盘空间不超过2TB。

UEFI克服了上述的所有缺点,采用C语言实现,分层,模块化设计,实现了CPU以及驱动的无关性。UEFI可以理解为一个完整的系统,包含了上电时序,驱动实现,os环境建立(这个os可以理解为UEFI运行独有的os,非linux,windows),应用程序。其中应用程序支持网络配置,类shell环境,fastboot,linux loader等。

UEFI启动阶段

UEFI从上电到关机,一共有七个阶段:

SEC(安全验证)

其功能包括:接受处理系统启动与重启信号、初始化临时RAM区、作为可信系统的根、以及传递系统参数到下一阶段。

其执行流程是:

上电 -> ResetVector -> SEC函数入口 -> PEI函数入口

PEI

主要功能是为DXE准备执行环境,将HOB列表传递给DXE。此阶段到后期内存才被初始化,所以资源相当有限,尚未可进行复杂的工作。

DXE

此阶段执行大部分系统初始化工作,内存已被初始化,可以进行大量复杂工作。当所有的Driver都执行完毕,说明系统初始化完成,接着通过EFI_BDS_ARCH_PROTOCAL找到BDS并调用BDS的入口函数,进入BDS阶段。

BDS

此阶段主要功能是执行启动策略,等OS Loader启动后,系统进入TSL阶段。

TSL

TSL是OS Loader执行的第一阶段,OS Loader在这个阶段作为UEFI APPLICATION运行,当ExitBootServices服务被调用后,进入RT(RunTime)阶段。

RT

系统进入此阶段后,系统控制权从UEFI内核转交到OS Loader上。随着OS Loader的执行,OS最终取得对系统的 控制权。

AL

在RT阶段,如果系统遇到灾难性错误,系统固件需要提供错误处理和灾难恢复机制,而这种机制运行在AL阶段。

其中UEFI中涉及的名词缩写 :

缩写

意义

UEFI

Unified extensible firmware interface

SEC

Security

PEI

Pre EFI initialization

DXE

Driver execution Environment

BDS

Boot Dev Select

TSL

Transient System Loa

RT

Runtime

AL

After life

GUID

Globally Unique Identifier

CSM

Compatibility Support Modul

TCG

Trusted Computing Group

PE

Portable executable

COFF

Common object file format

FV

Firmware Volume

UEFI有关文件格式

fdf:flash definitionfile,描述flash分区地址范围

dec:package declarationfile,定义了不同模块的GUID信息

dsc:description file,主要包含需要用到的所有inf文件

inf:单个模块的编译信息,类似makefile

efi :最终编译生成的UEFI可执行文件

高通平台的UEFI设计

高通在MSM8998上引入了UEFI,用来代替LK(Little Kernel)。

而高通UEFI由XBL和ABL两部分组成。

在老版本中,LK的设备驱动都放在了XBL核心,Linux加载启动及fastboot等功能组件则作为独立的UEFI应用存在。

XBL

XBL负责芯片驱动及充电等核心应用功能。

XBL核心是none-HLOS boot_image代码的一部分,属于高通私有代码。

// todo

UEFI代码中大量使用了protocol概念,这个protocol其实指的是驱动,包含了驱动函数指针和数据。以rampatition为例:

boot_images/QcomPkg/Include/Protocol/EFIRamPartition.h中声明了了rampatition protocol:

ABL

ABL包括芯片无关的应用如fastboot。ABL则在开源Linux Android代码树里。

ABL的编译非常简单,依次执行命令:

source build/envsetup.sh

lunch 32

make aboot

不同的厂商对UEFI有不同的实现,一种比较常用的开源实现是EDK2;EDK2是一个遵循UEFI标准和PI标准的跨平台固件开发环境,EDK2支持多种操作系统, 也支持跨平台编译。

确切来讲,高通所使用的edk2即为ABL部分的代码。

高通UEFI有关源码

对于高通平台启动过程依次为:PBL->XBL->ABL。

一般用户定制化主要集中在ABL中,这部分代码树如下:

这部分里面主要是作为linux-loader 用来加载linux,以及fastboot。

用户修改主要集中在这两个部分,入口函数LinuxLoaderEntry。

${Andrioid源码树}/bootable/bootloader/edk2/QcomModulePkg

├── Application

│ └── LinuxLoader

│ ├── LinuxLoader.c

│ └── LinuxLoader.inf

├── Include

│ ├── Library

│ │ ├──BoardCustom.h

│ │ ├── Board.h

│ │ ├──BootImage.h

│ │ ├──BootLinux.h

│ │ ├──BootStats.h

│ │ ├──Decompress.h

│ │ ├──DeviceInfo.h

│ │ ├── DrawUI.h

│ │ ├──FastbootMenu.h

│ │ ├── Fonts.h

│ │ ├── KeyPad.h

│ │ ├──LinuxLoaderLib.h

│ │ ├── list.h

│ │ ├──LocateDeviceTree.h

│ │ ├──MenuKeysDetection.h

│ │ ├──PartitionTableUpdate.h

│ │ ├── Recovery.h

│ │ ├── Reg.h

│ │ ├──ShutdownServices.h

│ │ ├──StackCanary.h

│ │ ├──UnlockMenu.h

│ │ ├──UpdateCmdLine.h

│ │ ├──UpdateDeviceTree.h

│ │ └──VerifiedBootMenu.h

│ └── Protocol

│ ├── EFICardInfo.h

│ ├── EFIChargerEx.h

│ ├── EFIChipInfo.h

│ ├── EFIChipInfoTypes.h

│ ├── EFIEraseBlock.h

│ ├── EFILimits.h

│ ├── EFIMdtp.h

│ ├── EFIPlatformInfo.h

│ ├── EFIPlatformInfoTypes.h

│ ├── EFIPmicPon.h

│ ├── EFIPmicVersion.h

│ ├── EFIQseecom.h

│ ├── EFIRamPartition.h

│ ├── EFIResetReason.h

│ ├── EFIRng.h

│ ├── EFIScmModeSwitch.h

│ ├── EFIUsbDevice.h

│ ├── EFIUsbEx.h

│ ├── EFIVerifiedBoot.h

│ └── UsbEx.h

├── Library

│ ├── BootLib

│ │ ├── Board.c

│ │ ├──BootLib.inf

│ │ ├──BootLinux.c

│ │ ├──BootStats.c

│ │ ├──Decompress.c

│ │ ├──DeviceInfo.c

│ │ ├── DrawUI.c

│ │ ├──FastbootMenu.c

│ │ ├── KeyPad.c

│ │ ├──LinuxLoaderLib.c

│ │ ├──LocateDeviceTree.c

│ │ ├──MenuKeysDetection.c

│ │ ├──PartitionTableUpdate.c

│ │ ├── Recovery.c

│ │ ├──ShutdownServices.c

│ │ ├──UnlockMenu.c

│ │ ├──UpdateCmdLine.c

│ │ ├──UpdateDeviceTree.c

│ │ └──VerifiedBootMenu.c

│ ├── FastbootLib

│ │ ├──FastbootCmds.c

│ │ ├──FastbootCmds.h

│ │ ├──FastbootLib.inf

│ │ ├──FastbootMain.c

│ │ ├──FastbootMain.h

│ │ ├──MetaFormat.h

│ │ ├──SparseFormat.h

│ │ ├──UsbDescriptors.c

│ │ └──UsbDescriptors.h

│ ├── StackCanary

│ │ ├──StackCanary.c

│ │ └──StackCanary.inf

│ └── zlib

│ ├── adler32.c

│ ├── inffast.c

│ ├── inffast.h

│ ├── inffixed.h

│ ├── inflate.c

│ ├── inflate.h

│ ├── inftrees.c

│ ├── inftrees.h

│ ├── zconf.h

│ ├── zlib.h

│ ├── zlib.inf

│ ├── zutil.c

│ └── zutil.h

├──QcomModulePkg.dec

├──QcomModulePkg.dsc

├──QcomModulePkg.fdf

└── Tools

├── app_path_set.cmm

├── check_paths.cmm

├── debug_app.cmm

├── elf_tools.py

├── image_header.py

├── load_uefi_dump.cmm

├── log_save.cmm

├── symbol_Load.cmm

└── uefi_core_path_set.cmm

附录:为什么android 默认bootloader选择lk?

结论:用于移动通信的android设备(如手机平板):软件小巧,架构简单,满足android bootloader的基本需求。

lk源码目录位置: bootable/bootloader/lk

Android bootloader需求:

加载引导 linux kernel

需要驱动Display、Usb、Keypad、Pmic、Vibrator

Uboot 的特点:

加载引导linux kernel

发展早,软件成熟稳定,功能完备;

支持的多个CPU 体系

支持复杂驱动,如Fs/Network等等;

Little Kernel特点:

加载引导linux kernel

轻量级、不支持复杂的驱动

高通about.html 文件,高通平台UEFI有关介绍相关推荐

  1. 高通about.html 文件,高通case提交指南2015Oct(4)(1)

    高通CASE提交指南 2015. Oct. 1. 高通CASE提交注意事项 1.1 Platform 指明基带芯片型号,如8996,8994,8992, 8936, fusion3,8974等,即使认 ...

  2. 小米网络信号测试软件,【小米5X评测】高通:骁龙625移动平台Modem及信号是亮点_手机评测-中关村在线...

    高通:骁龙625移动平台Modem及信号是亮点 骁龙移动平台=高跑分?如果你一直这样认为那就错了:高运算性能只是它真正实力的冰山一角.举个例子,你或许不知道,高速+高效的网络连接也是骁龙移动平台能够提 ...

  3. 基于高通骁龙X75和X72平台,移远通信5G R17模组为全球FWA和eMBB市场赋能

    日前,移远通信率先推出了符合3GPP Release 17标准的新一代工规级5G NR模组RG650E系列和RG650V系列. 相比前代5G产品,此次推出的5G R17模组在数据传输速率.网络容量.功 ...

  4. 四川省通江中学2021年高考成绩查询,「通江中学」2021年年通江中学升学率高不高?...

    为了让大家详细的了解关于通江中学的一些信息内容,四川中考升学网为大家整理了<「通江中学」2021年年通江中学升学率高不高?>这样一篇文章,一起来阅读一下,希望从这篇文章可以找到你想要的答案 ...

  5. 【最新】 博通1300亿美元收购高通希望渺茫:2年1500亿,盘点芯片巨头天价收购...

    日前,博通对高通的1300亿美元收购要约引发热议.在这次众人瞩目的意图收购之下,是暗潮汹涌的芯片角逐.自2015年以来,芯片行业发生的并购交易数额已超过1500亿美元.人工智能芯片硝烟四起,谁能赌对方 ...

  6. 最新高通芯片型号大全,高通技术资料下载

    高通:旨在分享高通系列芯片资料,和工程师们一起学习,讨论! 高通芯片型号分类: 高通芯片型号大全:http://bbs.16rd.com/citiao.html 高通资料下载:http://bbs.1 ...

  7. 高通沈劲:高通创投受到季节变化影响最小,2019年将会投入更多

    2018年初全球通信行业巨头Qualcomm高通完成对机智云B+轮投资,机智云作为高通创投重点投资的物联网领域代表企业,除在资本层面的合作外,在技术产品和市场层面获得高通大力支持,同时也将自身积累多年 ...

  8. AI每日看点 | 吉利收购飞行汽车公司;传华为暂停向高通支付专利费;高通拒绝博通收购邀约

    1. 吉利收购全球首家飞行汽车公司,将在中国量产 11月13日上午,浙江吉利控股集团有限公司与美国太力(Terrafugia)公司达成最终协议,收购太力公司的全部业务和资产.此项交易已获得包括美国外资 ...

  9. 中国共享汽车进军俄罗斯;华为在印度当地推进5G技术;传博通千亿美元收购高通丨价值早报

    第[762]期早报由[周日]赞助播出 01 今日头条 传博通千亿美元收购高通 11月4日消息,据路透社报道,下周一博通将公开高价收购高通的方案.此交易若达成,一个总值约2000亿美元的新公司将诞生,也 ...

最新文章

  1. C++知识点45——类继承中的类型转换与访问权限控制(上)
  2. 纯c gSoap实现WebService
  3. SevOne将SD-WAN监控扩展到VMware NSX
  4. linux 修改hostname
  5. intValue()的用法
  6. 在nginx.conf中配置https
  7. 研究生如何选定课题方向 如何变学神
  8. 程序员修复bug的吐血过程,太形象了
  9. 【测试】软件测试计划的编写
  10. 诺基亚推出全新IMPACT平台,交付快捷安全的物联网服务
  11. Nginx日志配置及分割
  12. 迁移应用程序到.NET Framework 4.5:弃用类型与新特性
  13. [0715]JSOI Test digit
  14. 打架打出来的牛逼城市!
  15. 原生JS实现登录功能,本地Cookie保存登录信息---【调用网易云API接口】---超详细讲解
  16. python webp图片转化格式
  17. html5页面中添加腾讯地图api
  18. 腾讯云服务器挂载云硬盘
  19. 内存类型UDIMM、RDIMM、LRDIMM大解析
  20. win10开启自带的手机投屏功能方式

热门文章

  1. python简单心形代码爱情闪字_qq空间爱情闪字主人寄语代码_思念就像受傷的傷口...
  2. 站长在线Python精讲:Python中函数的返回值
  3. 不讨人喜欢,该怎么办呀? 26个原则
  4. 研究生和本科生的区别
  5. Linux基础知识------系统安全及应用(教你如何删除历史记录,暴力破解密码)
  6. java IDEA开发工具汇总
  7. android使用自定义图片
  8. 魔兽世界服务器维护后刷新,《魔兽世界》当服务器维护公告发出后玩家们都遭遇了什么?...
  9. python通过代理访问网页_Python使用PyCurl通过SOCK5代理抓取网页 - Python - 服务器之家...
  10. 快速进行中日语言在线翻译