一、休眠唤醒基本概念PM相关的代码路径如下:
.linux_soruce/kernel/power/main.c
. linux_soruce/kernel/power/suspend.c
.linux_source/driver/base/power/main.c
可以看到linux中,休眠主要分为以下三个主要步骤:
1.冻结用户态进程和内核态任务;
2.调用注册的设备的suspend 的回调函数;
3.按照注册顺序休眠核心设备和使CPU进入休眠态。
其中冻结进程是内核把进程列表中所有的进程的状态都设置为停止,并且保存下所进程的上下文。当这些进程被解冻的时候,他们是不知道自己被冻结过的,只是简单的继续执行。如何让Linux进入休眠呢?
用户可以通过读写sys文件/sys/power/state 实现控制。
比如:
#cat sys/power/state来得到内核支持哪几种休眠方式。
二、休眠过程(suspend)
Linux休眠唤醒逻辑主要都在pm_suspend 函数里。分析一下该函数中的enter_state()。下面简要分析一下流程:
1. sys_sync()
同步文件系统
2. suspend_prepare()
suspend 前的准备工作
3. suspend_devices_and_enter()