一,高通平台的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: |
不同的厂商对UEFI有不同的实现,一种比较常用的开源实现是EDK2;EDK2是一个遵循UEFI标准和PI标准的跨平台固件开发环境,EDK2支持多种操作系统, 也支持跨平台编译。
确切来讲,高通所使用的edk2即为ABL部分的代码。
三,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。 |
五,为什么android 默认bootloader选择lk?
结论:用于移动通信的android设备(如手机平板):软件小巧,架构简单,满足android bootloader的基本需求。
lk源码目录位置: bootable/bootloader/lk |
Android bootloader需求:
加载引导 linux kernel
需要驱动Display、Usb、Keypad、Pmic、Vibrator