电源管理之android系统suspend to disk的实现(三)

二、Android 休眠(suspend)介绍

    1、android系统休眠的简单介绍

    android系统用的也是linux内核,但是他也是有不同的,由于它的特殊性,故代码在linux内核休眠基础上进行了整改。

    下面是对android内核已经实现的suspend做一个讲解,suspend to disk将会在调试的文件中涉及。

    在一个打过android补丁的内核中,state_store()函数会走另外一条路,会进入到request_suspend_state()中,这个文件在earlysuspend.c中.这些功能都是android系统加的,后面会对earlysuspend和lateresume进行介绍。

    涉及到的文件:

    android4.1/kernel/power/main.c

    android4.1/kernel/power/earlysuspend.c

    android4.1/kernel/power/wakelock.c

    2、android系统休眠涉及的几个特点

    下面介绍几个android系统涉及的比较独特的特性

    1)EarlySuspend

    Early suspend是android引进的一种机制,这个机制作用在关闭显示的时候,一些和显示有关的设备,比如LCD背光,重力感应器,触摸屏,这些设备都会关掉,但是系统可能还是在运行状态(这时候还有wakelock)进行任务的处理,例如在扫描SD卡上的文件等.在嵌入式设备中,背光是一个很大的电源消耗,所以android会加入这样一种机制。

    2)LateResume

    Late Resume是和suspend配套的一种机制,是在内核唤醒完毕开始执行的,主要就是唤醒在EarlySuspend的时候休眠的设备.当所有的唤醒已经结束以后,用户进程都已经开始运行了,唤醒通常会是以下的几种原因:

    来电

    如果是来电,那么Modem会通过发送命令给rild来让rild通知WindowManager有来电响应,这样就会远程调用PowerManagerService来写"on"到/sys/power/state来执行lateresume的设备,比如点亮屏幕等.

    用户按键用户按键事件会送到WindowManager中,WindowManager会处理这些按键事件,按键分为几种情况,如果案件不是唤醒键(能够唤醒系统的按键)那么WindowManager会主动放弃wakeLock来使系统进入再次休眠,如果按键是唤醒键,那么WindowManger就会调用PowerManagerService中的接口来执行Late Resume.

Late Resume会依次唤醒前面调用了EarlySuspend的设备.

    3)WakeLock

    Wake Lock在Android的电源管理系统中扮演一个核心的角色.WakeLock是一种锁的机制,只要有人拿着这个锁,系统就无法进入休眠,可以被用户态程序和内核获得。这个锁可以是有超时的或者是没有超时的,超时的锁会在时间过去以后自动解锁。如果没有锁了或者超时了,内核就会启动休眠的那套机制来进入休眠。

    4)AndroidSuspend

当用户写入mem或者standby到/sys/power/state中的时候,state_store()会被调用,然后Android会在这里调用request_suspend_state()而标准的Linux会在这里进入enter_state()这个函数.如果请求的是休眠,那么early_suspend这个workqueue就会被调用,并且进入early_suspend状态。调用request_suspend_state()后在suspend_work_queue工作线程上面注册一个early_suspend_work工作者,

    然后又通过staticDECLARE_WORK(early_suspend_work,early_suspend);注册一个工作任务early_suspend。所以系统最终会调用early_suspend函数。

    5)注册加入suspend和resume流程

platform_device_register()-->platform_device_add()-->device_add()-->device_pm_add()-->,最终加入到了dpm_list的链表中,在其中的dpm_suspend和dpm_suspend中通过遍历这个链表来进行查看哪个device中包含suspend和resume项。

个人观点,有问题请斧正!!

    转载请注明出处:http://blog.csdn.net/wang_zheng_kai


电源管理之android系统suspend to disk的实现(三)

上一篇:PS自定义快捷键汇总 让你体验极速设计感


下一篇:Photoshop设计绘制出彩色相机镜头