当前位置:   article > 正文

安卓禁止系统进入深度休眠,需求:插入充电器时候不进入深度休眠。linux wake_lock wake_unlock,cat /sys/kernel/debug/wakeup_sources查看_android 系统不深度睡眠

android 系统不深度睡眠

一、看kernel log,目前插着充电器灭屏幕之后会进入休眠。

二、 目前有个需求:因为进入深度休眠后会把一些电给关了,现在需要插入充电器的情况下不进入深度休眠。

三、linux wake_lock 已经/sys/power 下面提供相关接口

 四、驱动文件在 kernel\kernel\power\main.c 、kernel\kernel\power\wakelock.c

 

 五、Android 上层调用这些接口的地方在system\hardware\interfaces\suspend\1.0\default\SystemSuspend.cpp

六、在Linux系统中,wake_lock是一直锁机制,只要有驱动占用这个锁,系统就不会进入深度休眠。读wakeup_count,如果一直被占用就会一直等待,就不会进入深度修改。

 七、进入休眠的方式,读wakeup_count是为了保证当前wake_lock没有被占用,执行后系统会进入深度休眠。注意读出来的和写进去的是一样的,不然写不了。

 

八、满足需求(需要插入充电器的情况下不进入深度休眠)。需要修改的代码

七、 查看系统持锁情况,使用如下命令查看所有的锁,实现的代码在kernel\drivers\base\power\wakeup.c

cat /sys/kernel/debug/wakeup_sources

打印出wakeup_sources节点下active_since项为非0的锁的名称
 

awk ‘$6 != 0 {print $1" "$6}’ /sys/kernel/debug/wakeup_sources

九、分析过程中涉及的文件

frameworks/base/services/core/java/com/android/server/wm/ActivityStackSupervisor.java
system\hardware\interfaces\suspend\1.0\default\SystemSuspend.cpp
kernel/power/suspend.c
kernel/power/main.c
kernel\kernel\power\wakelock.c
system/hardware/interfaces/suspend/1.0/default/SystemSuspend.cpp

十、参考文章

1、Android 禁止系统进入深度休眠_weixin_30756499的博客-CSDN博客

2、Android 系统定制不进入深度休眠+增加后台运行白名单_青春给了狗的博客-CSDN博客

3、android 阻止系统进入深度休眠(不影响正常休眠逻辑)_芊汐的博客-CSDN博客_android阻止系统休眠

4、Linux电源管理(8)_Wakeup count功能_jacob的博客-CSDN博客

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/301731
推荐阅读
相关标签
  

闽ICP备14008679号