1. 插入USB会自动开机,这个查资料是由于userdebug模式会进入自动开机,而user模式会进入充电界面。所以只要编译的时候用user模式编译就不会自动开机了。
bootloader/lk/aboot.c 里的unsigned char *update_cmdline(const char * cmdline)函数里
else if ((target_build_variant_user() || device.charger_screen_enabled) ||| cmd_erase_nand
371 && target_pause_for_battery_charge()) { ||| cmd_erase_mmc
372 pause_at_bootup = 1; ||| cmd_erase
373 cmdline_len += strlen(battchg_pause); ||| aboot_get_secret_key
374 }
红色部分是版本判断
2. 如果在debug模式关掉,可以通过命令切换。
先进入 fastboot 模式 : sudo adb reboot bootloader
然后运行 :
sudo fastboot oem enable-charger-screen //打开关机充电
sudo fastboot oem disable-charger-screen //关闭充电,自动开机
sudo fastboot reboot //重启就可以生效
---------------------------
usb插入通过传递cmdline给init解析从而启动充电进程
1. LK
lk\app\aboot\aboot.c
update_cmdline
----------
if (boot_into_ffbm) // 工厂测试模式
{
cmdline_len += strlen(androidboot_mode);
cmdline_len += strlen(ffbm_mode_string);
/* reduce kernel console messages to speed-up boot */
cmdline_len += strlen(loglevel);
}
else if (target_pause_for_battery_charge()) // 判断是否关机充电
{
pause_at_bootup = 1; // charger flag
cmdline_len += strlen(battchg_pause); //更新 cmd line 长度
}
----------
else if (pause_at_bootup) // charger flag
{
src = battchg_pause; // static const char *battchg_pause = " androidboot.mode=charger";
if (have_cmdline) --dst;
while ((*dst++ = *src++));
}
2.init
#init.c
if (!is_ffbm)
is_charger = !strcmp(bootmode, "charger");
----------
if (is_charger)
action_for_each_trigger("charger", action_add_queue_tail);
# init.rc
on charger
class_start charger
----------
# init.qcom.rc
service charger /charger
class charger
----------
#system/core/healthd/Android.mk
LOCAL_MODULE := healthd
...
# Symlink /charger to /sbin/healthd