Android 开机启动模式源码分析

在机器关机情况下,长按Power键启动机器,如果这时机器低电,会提示低电,机器不会正常启动:

而代码如下:

如果不是低电,正常情况是可以启动的。

在关机情况下,插入USB,机器会自然启动,这个时候kernel已经启动了,但是Android系统还没有启动,不过已经进入了关机充电界面了,具体流程看下面代码流程:

看到process_kernel_cmdline函数了,就是解析cmdllie参数,这是一种kernel往系统传递参数的一种方式,继续往下走:

再看import_kernel_nv函数:

看到androidboot名字了吧,具体文件在proc/cmdline,这里的是正常启动,所以值是emmc:

解析出来后,马上调用函数property_set设置,供后面get使用。

再回到init.c的main函数:

这里是判断is_charger是否是usb插入启动模式,如果是就进入充电界面,而charger是在这里启动的:


进入了event_loop函数,是个相对死循环函数:

再看看handle_input_state函数:

看到参数了么:KEY_POWER,对Power键的处理,再进去看看:

终于明白了,在充电的时候,如果长按Power键2秒钟,就会从新启动Android系统,他会记录好启动参数,要不然重启是又会来到充电界面,而是要去到解锁界面完成启动了;再看看android_reboot函数吧:

reboot具体参数就不分析了,有兴趣自己研究!

这里的充电界面资源和代码如下:

看到这里,至少在开机的时候,面对两个现象【开机低电提示和插USB开机充电】应该有很清楚的认识了吧!

觉得本文对您有用,麻烦点赞、关注、收藏,您的肯定是我创作的无限动力,谢谢!!!

相关推荐
Devil枫2 小时前
Kotlin高级特性深度解析
android·开发语言·kotlin
ChinaDragonDreamer2 小时前
Kotlin:2.1.20 的新特性
android·开发语言·kotlin
雨白12 小时前
Jetpack系列(二):Lifecycle与LiveData结合,打造响应式UI
android·android jetpack
kk爱闹14 小时前
【挑战14天学完python和pytorch】- day01
android·pytorch·python
每次的天空16 小时前
Android-自定义View的实战学习总结
android·学习·kotlin·音视频
恋猫de小郭16 小时前
Flutter Widget Preview 功能已合并到 master,提前在体验毛坯的预览支持
android·flutter·ios
断剑重铸之日17 小时前
Android自定义相机开发(类似OCR扫描相机)
android
随心最为安17 小时前
Android Library Maven 发布完整流程指南
android
岁月玲珑17 小时前
【使用Android Studio调试手机app时候手机老掉线问题】
android·ide·android studio
桦说编程19 小时前
深入解析CompletableFuture源码实现
java·性能优化·源码