linux电源管理--休眠与待机
Linux内核支持多种睡眠状态,例如:Freeze、mem和disk等。通过在用户空间向"/sys/power/state"分别写入freeze、disk、和mem等即可触发。
这里主要通过对两种睡眠状态:挂起到内存和挂起到硬盘来分析。
-
挂起到内存
计算机将当前的运行状态放到内存中,关闭其他的硬盘等外设设备,进入等待状态。只需要为内存提供少量需要的电力维持数据存储。恢复时计算机从内存中读出数据,恢复到挂起之前的状态,恢复速度较快。
-
挂起到disk
计算机将当前的运行状态放到disk的特定文件或特定区域中,RAM也可以被关掉,因此,此时的恢复时间相较挂起到内存需要更多的时间,需要先从disk中读回数据到RAM,然后再恢复计算机的状态。当计算机选择挂起到disk中后,可以关闭掉硬盘、外设等设备,并且计算机进入到完全关机状态,不耗电。
相关代码分布
内核中的suspend及resume过程主要有包含PM Core、Device PM以及Platform PM等几个部分,具体如下:
-
PM Core
-
kernel/power/user.c ---- 提供用户空间接口
-
kernel/power/suspend.c ---- suspend功能的主要逻辑
-
kernel/power/suspend.c ---- suspend功能的测试逻辑
-
kernel/power/console.c ---- suspend过程中对控制台的处理逻辑
-
kernel/power/process.c ---- suspend过程中对进程的处理逻辑
-
kernel/power/hibernate.c ---- suspend-to-disk 功能实现
-
kernel/power/swap.c ---- suspend-to-swap 功能实现
-
kernel/power/main.c ---- PM subsystem core functionality
-
-
Device PM
-
drivers/base/powe/* ---- 设备驱动相关电源管理处理逻辑,主要功能是:对下,定义Device PM相关的回调函数,让各个具体设备的驱动实现;对上,实现统一的PM操作函数,供PM核心逻辑调用
-
相关的具体设备驱动
-
-
Platform PM
-
include/linux/suspend.h ---- 定义platform dependent PM有关的处理逻辑
-
具体平台架构的电源管理操作
-
suspend与resume流程分析
接下来介绍suspend与resume的流程,并简单分析相关函数。
suspend流程
Linux suspend主要有以下三个步骤:
-
冻结用户态进程和内核态任务
-
调用设备注册的suspend回调函数,按照注册顺序执行
-
休眠核心设备和CPU
resume流程
从待机状态恢复的流程从syscore_resume函数开始。这个函数唤醒系统的核心设备。
与恢复相关的函数还有:
- arch_suspend_enable_irqs : 使能中断
- enable_nonboot_cpus : 使能非启动CPU
- suspend_ops->wake : 执行处理器的wake函数
- dpm_resume_start : 唤醒外设
- dpm_resume_end : resume所有非系统设备,即执行所有注册设备的resume回调函数
- resume_console : resume console子系统,此时printk可用
- suspend_finish
- suspend_thaw_processes : 解冻进程
- pm_notifier_call_chain : 广播一个系统suspend结束的Notify,外设在收到通知时会做一些准备
- pm_resotre_console : 恢复控制台
参考链接
- https://blog.csdn.net/zirconsdu/article/details/9355657?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param
- https://blog.csdn.net/qwaszx523/article/details/52651000
- http://www.wowotech.net/linux_kenrel/suspend_and_resume.html


浙公网安备 33010602011771号