当前位置: 代码迷 >> 综合 >> 1.11.3、低功耗-休眠唤醒基本概念
  详细解决方案

1.11.3、低功耗-休眠唤醒基本概念

热度:100   发布时间:2023-10-15 23:03:25.0

一、休眠唤醒基本概念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()

三、唤醒过程(Resume)

四、唤醒源(wakeup_source)五、唤醒锁(wakelock)