欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

高通MSM8998 ABL的调试

程序员文章站 2022-03-09 17:19:26
高通在MSM8998上引入了UEFI,用来代替LK(Little Kernel)。高通UEFI由XBL和ABL两部分组成。XBL负责芯片驱动及充电等核心应用功能。ABL包括芯片无关的应用如fastboot。XBL核心是none-HLOS boot_image代码的一部分,属于高通私有代码。ABL则在 ......

        高通在msm8998上引入了uefi,用来代替lk(little kernel)。高通uefi由xbl和abl两部分组成。xbl负责芯片驱动及充电等核心应用功能。abl包括芯片无关的应用如fastboot。xbl核心是none-hlos boot_image代码的一部分,属于高通私有代码。abl则在开源linux android代码树里。lk的设备驱动都放在了xbl核心,linux加载启动及fastboot等功能组件则作为独立的uefi应用存在。有关uefi、xbl及abl的详细介绍,请参见高通文档《80_p2484_37_linux_android_uefi_overview.pdf》。

        abl的编译非常简单,依次执行命令source build/envsetup.sh、lunch 32、make aboot,即可在out目录下生成abl.elf。这次调试abl主要碰到了两个问题,一是没有生成abl.elf,二是生成abl.elf后没有做签名。高通原生代码并不存在问题,是项目中修改了代码导致的。费了一番周折,最终成功编译出可正常工作的abl.elf。未签名的abl.elf大概98kb,签名后的abl.elf约108kb。需要注意的是,abl在android代码树下,而签名工具(secimage)在高通私有代码目录(vendor/qcom/proprietary)下,在编译abl时,一定要将高通提供的私有代码全部放到相应的目录下。未签名的abl.elf会让系统无法启动,上电直接进入edl紧急下载模式。

        这次调试abl还是为了解决误入ffbm的问题。之前是通过修改init来解决的,即在设置系统property时忽略内核命令行参数中的ffbm模式。而修改abl则是打算在读取misc分区时做处理,直接不生成内核命令行参数的相应配置项。注释掉bootlinux.c中getffbmcommand的相关代码,具体如下,

        高通MSM8998 ABL的调试

        烧录经过签名的abl.elf到abl分区,并将misc分区内容写为ffbm,重启机器,系统果然可以正常进入android,并且内核命令行参数也无androidboot.mode=ffbm项,达到预期目的,详细如下图所示。

        高通MSM8998 ABL的调试