最近刚刚做了一份关于电源管理中android系统suspend to disk的实现研究学习报告,最近比较清闲就简单做了整理。
我是基于北京君正jz4780grus开发板做的探究,我将要在这几天按照下面做一个学习报告,其内容如下所示:
一、Linux休眠/唤醒简介
1、介绍Linux系统的Suspend的四种状态
2、Linux系统的休眠的步骤
3、用户空间接口
4、Linux Suspend 的流程
5、Linux Resume流程
二、Android 休眠(suspend)介绍
1、android系统休眠的简单介绍
2、android系统休眠涉及的几个特点
3、Android的suspend执行流程
4、Android的wake Lock执行流程
5、Android于标准Linux休眠的区别
三、android系统休眠(suspend to RAM)执行流程图
四、android系统休眠(hibernation)执行流程图
五、我实现的方案比较,及实现方式
六、测试数据以及问题解决方法
下面我就开始介绍了:
电源管理
前言:
待机
计算机将目前的运行状态等数据存放在内存,关闭硬盘、外设等设备,进入等待状态。此时内存仍然需要电力维持其数据,但整机耗电很少。恢复时计算机从内存读出数据,回到挂起前的状态,恢复速度较快。一般笔记本在电池无故障且充满的情况下可以支持这种挂起数小时甚至数天(依具体机型有差别)。
其他名称:Suspend, STR(Suspend To RAM), 挂起, 挂起到内存
休眠
计算机将目前的运行状态等数据存放在硬盘上某个文件或者某个特定的区域,关闭硬盘、外设等设备,进入关机状态。此时计算机完全关闭,不耗电。恢复时计算机从休眠文件/分区中读出数据,回到休眠前的状态,恢复速度较慢。但由于这种方法完全耗电又能保存工作状态,往往被笔记本用户用来作为关机的替代方式。
其他名称:Hibernation, STD(Suspend To Disk), 挂起到硬盘, 休眠到硬盘
休眠/唤醒在嵌入式Linux中是非常重要的部分,它的作用可以分为以下两点:
1、通过进入休眠状态来延长电池的续航时间;
2、通过休眠实现快速启动;
接下来就详细介绍一下Linux中休眠/唤醒是如何工作的,还有Android中如何把这部分和Linux的机制联系起来的.
一、Linux休眠/唤醒简介
1、Linux系统的Suspend的四种状态
Suspend/Resume是Linux系统电源管理的一个重要功能,Suspend可以在系统不使用的情况下进入低功耗活休眠状态下从而节省系统电源。Linux系统的Suspend有四种状态,对于不同的体系结构或者电源管理接口来说,状态的含义不一定完全相同,但是不会有太大的差别。下面的是ACPI电源接口的含义及其对应的Sleep State。
- On(on) S0 - Working
- Standby (standby) S1 -CPU and RAM are powered but not executed
- Suspend to RAM(mem) S3 - RAMis powered and the running content is saved to RAM
- Suspend to Disk,Hibernation(disk) S4 - All contect is saved to Diskand power down
2、Linux系统的休眠的步骤
在Linux中,休眠主要分三个主要的步骤:
1)冻结用户态进程和内核态任务
2)调用注册的设备的suspend的回调函数,顺序是按照注册顺序
3)休眠核心设备和使CPU进入休眠态冻结进程是内核把进程列表中所有的进程的状态都设置为停止,并且保存所有进程的环境。当这些进程被解冻的时候,他们是不知道自己被冻结过的,只是简单的继续执行。
3、用户空间接口
如何让Linux进入休眠呢?
首先我们通常先通过# cat/sys/power/state来得到内核支持哪几种休眠方式。
然后我们来看一下suspend的用户空间接口,这是一个/sys文件系统接口,接口文件是/sys/power/state。这是我们在用户空间操作Suspend的唯一的一个接口。当我们向这个文件写入想要进入的有效的suspend状态的时候,系统就会调用Suspend函数进入到一个有效的suspend状态。比如我们向这个文件写入disk就会使系统进入Suspend to RAM状态,如下的命令:
echo disk > /sys/power/state //让系统进入休眠状态
更通俗的讲就是,用户对于/sys/power/state 的读写会调用到 main.c中的state_store(),用户可以写入 const char * const pm_state[] 中定义的字符串,比如"mem"、 "standby",''disk''。只是standby耗电更多,返回到正常工作状态的时间更短。
然后state_store()会调用enter_state(),它首先会检查一些状态参数,然后同步文件系统。
未完待续!!
个人观点,有问题请斧正!!
转载请注明出处:http://blog.csdn.net/wang_zheng_kai