Android suspend底层流程解析
来源:互联网 发布:淘宝卖家的钱在哪里 编辑:程序博客网 时间:2024/05/17 07:23
刚做的一个项目,在Android上实现快速启动,先将原理叙述如下,当用户长按电源键,选择“下次开机快速启动”后,系统启动hibernate to disk的流程:
1. Power manager使用命令"echo disk > /sys/power/state"启动kernel suspend流程。其实Android进入省电模式(按键背景灯、屏幕关闭等)也是通过这种方式启动的,命令是"echo mem > /sys/power/state"
2. 上面命令会调用Power driver kernel/main.c中的sysfs state属性的state_store函数,在该函数中分别针对不同类型的suspend进行不同的处理。
3. 如果是suspend to disk会调用hibernate;
4. 如果是early suspend会调用request_suspend_state进行android的early suspend,它是android引入的新的省电机制,大致的动作就是通过suspend_work_queue调用early_suspend,该函数会调用early_suspend_handlers链表上每个节点的suspend方法,这些节点是各驱动在初始化时注册进来的,节点也有从省电状态进入正常状态的resume方法,不同设备驱动实现各自的两个函数,另外在每个节点也有对应level,该值决定了suspend、resume时的各节点被调用的顺序。搜索整个driver,发现synaptics的touch screen,iMX的framebuffer,mddi,console等几个驱动实现了early suspend机制。early_suspend函数最后会调用sys_sync,并释放main_wake_lock。当wake lock的全部持有者都释放后,会触发linux 标准的suspend流程。
5. linux标准的suspend流程实现在kernel/power/suspend.c中enter_state函数,主要动作为:1)冻结进程 2)调用所有设备的suspend方法 3)停用cpu从核 4)调用所有系统设备的suspend方法 5)主核休眠
该图转自MyArrow博客,http://blog.csdn.net/myarrow/article/details/8837756
下一篇详细解释hibernation的流程,很复杂,ready to go!
- Android suspend底层流程解析
- Android (Linux) Suspend流程
- Android (Linux) Suspend流程
- Android (Linux) Suspend流程
- Android (Linux) Suspend流程
- Android (Linux) Suspend流程
- Android (Linux) Suspend流程
- Android (Linux) Suspend流程
- Android (Linux) Suspend流程
- suspend流程
- Android suspend-to-mem 流程分析
- Android中Linux suspend/resume流程
- android 底层启动流程
- Android多媒体-底层流程简介
- Android Suspend
- Android Suspend
- Android Suspend
- android suspend
- opengl 教程(4) shader(1)
- 用一个class生成多个安卓程序cocos2d
- NGUI系列教程三
- android 常见死机问题--log分析
- jquery ajax的 异步与同步
- Android suspend底层流程解析
- NGUI系列教程四(自定义Atlas,Font)
- NGUI系列教程五(角色信息跟随)
- Java锁机制
- Touch事件和ScrollView的冲突
- Listview下的CheckBox设置全选或者全部选
- zend studio集成thinkphp框架新建项目
- MongoDB入门简介
- 探索JavaScript中Null和Undefined的坑