没有合适的资源?快使用搜索试试~ 我知道了~
首页Linux Kernel and Android 休眠与唤醒
资源详情
资源评论
资源推荐

Linux Kernel and Android 休眠与唤醒 ( 中文
版 )
Table of Contents
简介
国际化
版本信息
对于休眠 (suspend) 的简单介绍
Linux Suspend 的流程
o 相关的文件 :
o 准备 , 冻结进程
o 让外设进入休眠
o Resume
Android 休眠 (suspend)
o 涉及到的文件 :
o 特性介绍
Early Suspend
Late Resume
Wake Lock
o Android Suspend
o Early Suspend
o Late Resume
o Wake Lock
o Suspend
o Android
于标准
Linux
休眠的区别
简介
休眠/唤醒在嵌入式 Linux 中是非常重要的部分,嵌入式设备尽可能的进入休眠
状 态来延长电池的续航时间.这篇文章就详细介绍一下 Linux 中休眠/唤醒是如
何工作 的, 还有 Android 中如何把这部分和 Linux 的机制联系起来的.
国际化
English Version: link
中文版: link

作者: zhangjiejing <kzjeef#gmail.com> +Date: 2010-04-07,
http://www.thinksrc.com
版本信息
Linux Kernel: v2.6.28
Android: v2.0
对于休眠(suspend)的简单介绍
在 Linux 中,休眠主要分三个主要的步骤:
1. 冻结用户态进程和内核态任务
2. 调用注册的设备的 suspend 的回调函数
o 顺序是按照注册顺序
3. 休眠核心设备和使 CPU 进入休眠态冻结进程是内核把进程列表中所有的
进程的状态都设置为停止,并且保存下所有进程的上下文. 当这些进程被
解冻的时候,他们是不知道自己被冻结过的,只是简单的继续执行.如何让
Linux 进入休眠呢?用户可以通过读写 sys 文件/sys /power/state 是实
现控制系统进入休眠. 比如
# echo standby > /sys/power/state
命令系统进入休眠. 也可以使用
# cat /sys/power/state
来得到内核支持哪几种休眠方式.
Linux Suspend 的流程
相关的文件:
你可以通过访问 Linux
内核网站 来得到源代码,下面是文件的路径:
linux_soruce/kernel/power/main.c
linux_source/kernel/arch/xxx/mach-xxx/pm.c

linux_source/driver/base/power/main.c
接下来让我们详细的看一下 Linux 是怎么休眠/唤醒的. Let 's going to see
how these happens.
用户对于/sys/power/state 的读写会调用到 main.c 中的 state_store(), 用
户可以写入 const char * const pm_state[] 中定义的字符串, 比如"mem",
"standby".
然后 state_store()会调用 enter_state(), 它首先会检查一些状态参数,然后同
步文件系统. 下面是代码:
/**
* enter_state - Do common work of entering low-power state.
* @state: pm_state structure for state we're
entering.
*
* Make sure we're the only ones trying to enter a sleep
state. Fail
* if someone has beat us to it, since we don't want
anything weird to
* happen when we wake up.
* Then, do the setup for suspend, enter the state, and
cleaup (after
* we've woken up).
*/
static int enter_state(suspend_state_t state)
{
int error;
if (!valid_state(state))
return -ENODEV;
if (!mutex_trylock(&pm_mutex))
return -EBUSY;
printk(KERN_INFO "PM: Syncing filesystems ... ");
sys_sync();
printk("done.\n");
pr_debug("PM: Preparing system for %s sleep\n",
pm_states[state]);
error = suspend_prepare();
剩余13页未读,继续阅读















zhenwenxian
- 粉丝: 793
- 资源: 774
上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助

会员权益专享
安全验证
文档复制为VIP权益,开通VIP直接复制

评论1