Qualcomm introduced UEFI on MSM8998 to replace LK (Little Kernel). Qualcomm UEFI consists of two parts: XBL and ABL. XBL is responsible for core application functions such as chip driver and charging. ABL includes chip-independent applications such as FastBoot. The XBL core is part of the None-hlos Boot_image code and belongs to Qualcomm private code. ABL is in the open source Linux Android code tree. LK's device drivers are placed in the XBL core, and functional components such as Linux load Startup and FastBoot are available as standalone UEFI applications. For a detailed description of UEFI, XBL, and ABL, see the Qualcomm documentation, "80_p2484_37_linux_android_uefi_overview.pdf".
The ABL compilation is very simple, in order to execute the command source build/envsetup.sh, lunch 32, make aboot, you can generate abl.elf in the out directory. This debugging ABL mainly encountered two problems, one is not generated abl.elf, and the second is generated abl.elf after no signature. There is no problem with high-pass native code, which is caused by code modifications in the project. After a few twists and turns, the successful compilation of a working abl.elf. Unsigned abl.elf about 98KB, signed abl.elf about 108KB. It is important to note that ABL is under the Android code tree, while the signature tool (Secimage) is under the Qualcomm Private Code directory (vendor/qcom/proprietary), and when compiling the ABL, be sure to put all the private code provided by Qualcomm into the appropriate directory. Unsigned abl.elf will cause the system to fail to boot and power up directly into the EDL emergency download mode.
This commissioning ABL is also to solve the problem of ffbm into the wrong. This was done by modifying Init to ignore the FFBM mode in the kernel command line arguments when setting the system property. The modified ABL is intended to be processed when the misc partition is read, without generating the corresponding configuration items for the kernel command line parameters directly. Comment out the relevant code for Getffbmcommand in Bootlinux.c, as follows,
Burn the signed abl.elf to the ABL partition, and write the misc partition content as FFBM, restart the machine, the system will normally enter Android, and the kernel command line parameters are not ANDROIDBOOT.MODE=FFBM items, for the intended purpose, as shown in detail.
High-pass MSM8998 ABL Commissioning