高通EUFI分了ABL,XBL两部分
ABL类似于lk,xbl类似preload,但也有不同。
ABL的主要代码在
/bootable/bootloader/edk2/QcomModulePkg/Application/LinuxLoader/LinuxLoader.c
从名字看属于应用,是检查状态进入recovery mode或者Normal模式。
对于关机充电的判断和控制比较关键的是
bootable/bootloader/edk2/QcomModulePkg/Library/BootLib/UpdateCmdLine.c
控制gpio
看到有些网站上介绍abl控制gpio用gpio_tlmm_config
但在abl代码里搜不到gpio_tlmm_config,并且xbl中也搜不到
因此,实际上新的架构已经不用gpio_tlmm_config这个了。
更为怪异的是abl中都搜不到gpio相关的内容,而xbl中可以搜到一些,因此推测是abl中不直接控制硬件,是在xbl中控制。
那么如果有需要再abl---比如关机充电的控制,要读硬件状态,那么要怎样控制呢?
这个就要引入protocol的控制
abl,xbl,protocol
Status = gBS->LocateProtocol (&gChargerExProtocolGuid, NULL,
(VOID **)&ChgDetectProtocol);
........
Status = ChgDetectProtocol->IsOffModeCharging (BatteryStatus);
这个比较通俗的解释就是要调用gChargerExProto