【原创】Linux Suspend流程分析

时间:2019-08-18 17:21:50   收藏:0   阅读:136

背景

说明:

  1. Kernel版本:4.14
  2. ARM64处理器
  3. 使用工具:Source Insight 3.5, Visio

1. 介绍

Linux Kernel支持四种Sleep State

上述四个状态,功耗节省效果依次增强,同时唤醒回来的时间开销也相应加大。

2. 流程

通过/sys接口可以触发Suspend流程:

代码路径:
kernel/power/main.c
kernel/power/suspend.c

STR流程如下图,入口函数为pm_suspend
技术分享图片
简而言之,这是一张信息量很大的图片,涵盖了Suspend To Ram的整个流程。
图片中,从上到下涉及到进程的freeze,各种设备驱动的Suspend,平台的Suspend,CPU的Offline操作,syscore的Suspend操作。其中涉及到CPU的操作时,在ARMv8中,会通过PSCI接口调用到ARM Trusted Firmware, ATF,这个在【原创】Linux PSCI框架探讨过。
多说无益,看图吧。

3. process freeze

Suspend过程中,有一个函数suspend_freeze_processes引起了我的好奇心,我刻意分析了下。在Suspend的时候是需要将用户进程和内核线程freeze掉,避免它们来捣乱,比如你在Suspend某个驱动的时候,此时用户还在使用该驱动的资源,这时候可能就会引起问题了。不过,内核线程并不是所有的都能freeze掉。
记住两个知识点:

具体还是看图吧:
技术分享图片

进程的操作比较复杂,以后在研究进程管理的时候再分析。

原文:https://www.cnblogs.com/LoyenWang/p/11372679.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!