Android 中电源状态切换

转自:http://blog.csdn.net/tianruxishui/article/details/7198679

参考: http://blog.csdn.net/droidphone/article/details/6632516

  http://www.thinksrc.com/2010/04/18/suspend-cn.html           : Linux Kernel and Android 休眠与唤醒(中文版)

 http://blog.chinaunix.net/space.php?uid=15732309&do=blog&id=2763150      : Android是如何进入休眠的

1, Android中支持的电源状态:

        PM_SUSPEND_ON -- 设备处于全电源状态,也就是正常工作状态;

        PM_SUSPEND_MEM -- suspend to memory,设备进入睡眠状态,但所有的数据还保存在内存中,只有某些外部中断才可以唤醒设备。

       PM_SUSPEND_STANDBY  ----- 在大部分的Android设备中均不支持。

 

2, Early Suspend / Late Resume

         在Android中,增加了系统休眠的层次,把休眠划分为深度睡眠(sleep)和浅度睡眠(idle)。  

         因此当系统往 /sys/power/state 节点写入 mem (如在命令行 写入: echo mem > /sys/power/state) 将会使系统进入睡眠。参考HAL中:hardware/libhardware_legacy/power/power.c  :  set_screen_state   ------> write (on / mem )   to  /sys/power/state

         浅度睡眠 仅仅是关掉背光,fb, sensor,触摸屏等在关屏状态下不需要使用的设备,而整个CPU和大部分外设还是正常工作的。

                                                   

            深度睡眠sleep 与 浅度睡眠 idle 之间切换的过程如上所示。

 

3,  Android的 Wake Lock

          Android系统提供了两种类型的锁:

                   WAKE_LOCK_SUSPEND  --  阻止系统进入suspend状态;

                   WAKE_LOCK_IDLE  --  阻止系统进入idle状态;

                   wake lock 可以设置超时释放,在持有wake lock一个固定时间之后自动释放。一般应用在系统正在处理一些事情的时候,防止系统进入深度睡眠而干扰了正在处理的任务; 尤其是在做了硬件唤醒的,当唤醒之后要处理一些响应,为了防止系统马上再次进入休眠,在设置一个超时锁。

          如系统能否进入深度睡眠,当系统处在idle时,会不断判断是否还有WAKE_LOCK_SUSPEND

        

4,  电源状态切换的调试:

           /sys/power/state

          /sys/power/wake_lock

          /sys/power/wake_unlock

          1)  cat  /sys/power/state -----查看系统状态,  echo mem > /sys/power/state    ---- 将系统设置为进入休眠

          2) echo "name"    > /sys/power/wake_lock ----- 申请一个锁

                 cat /sys/power/wake_lock -----查看系统的wake lock 情况

                 wake_unlock 同样。

 

         3)  echo 15 > /sys/module/wakelock/parameters/debug_mask   ------------

               这样wakelock的驱动会把每次的wakelock操作都打印在console上,对于调试为什么suspend不下去这类的问题很有用。如下所示:

               [ 1062.912297] wake_lock: mmc_delayed_work, stop expire timer
               [ 1062.922395] wake_unlock: mmc_delayed_work, start expire timer, 990
               [ 1062.931174] wake_lock: event0-79, start expire timer, 989
               [ 1062.933710] wake_lock: event0-79, start expire timer, 989
               [ 1062.939081] wake_lock: event0-79, start expire timer, 989
               [ 1062.961143] wake_lock: event0-79, start expire timer, 986


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值