赞
踩
一、看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博客
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。