1、模式解析流程:
frameworks/base/core/java/android/os/PowerManager.java
frameworks/base/services/core/java/com/android/server/power/PowerManagerService.java
把reason存储到SystemProperties,最后调用ShutdownThread带着reason传参
frameworks/base/services/core/java/com/android/server/power/ShutdownThread.java
这个类中主要是根据一些条件做了一些单独处理,例如recovery等可能还会展示弹窗
SystemProperties.set(“sys.powerctl”, “reboot,” + reason),这里很重要。静默重启会把这个值存储到内核特定的启动参数,这个启动参数在下次重启时会被系统拿到。这里内部就涉及SystemProperties原理和源代码了
同时,内核还会解析reason,存储另一个SystemProperties;大概的流程是lk 中读到 rtc 的 Quiescent 标志位,则不显示开机logo,并且在 cmdline 中添加 androidboot.quiescent=1;lk -> kernel -> init,init 会解析 cmdline,并把其中的 androidboot.quiescent=1 解析出来,并设置成 ro.boot.quiescent=1,这样后续 Android 所有地方都能知道此次是 quiescent 开机
Sys.Powerctl
平台reboot_mode寄存器配置:
bsp/bootload