Android休眠唤醒驱动流程分析

https://blog.csdn.net/coldsnow33/article/details/18138995  转载!

https://blog.csdn.net/qq_28779021/article/details/80046713 转载!

https://www.linaro.org/blog/suspend-to-idle/

https://www.cnblogs.com/deng-tao/p/6026373.html

 

自己这篇文章是在前人的基础上实践了一下,顺便写一下实验记录。

查看系统支持的休眠方式:

cat /sys/power/state 

1 suspend state  

suspend to idle、power-on standby(Standby)、suspend to ram(STR)和sudpend to disk(Hibernate),分别对应ACPI状态的S0、S1、S3和S4。Linux系统的suspend四种状态,对于不同的体系结构或者电源管理接口来说,状态的含义不一定完全相同,但是不会有太大的差别。下面的是ACPI电源接口的含义及其对应的Sleep State。

State in Linux Label state ACPI state 注释
#define PM_SUSPEND_ON        ((__force suspend_state_t) 0)        一切正常
#define PM_SUSPEND_FREEZE    ((__force suspend_state_t) 1) freeze Suspend-to-Idle S0 冻结进程+挂起设备+CPU空闲 
#define PM_SUSPEND_STANDBY    ((__force suspend_state_t) 2) standby Standby/Power-on Suspend S1 冻结进程+挂起设备+关闭nonbootCPU 
#define PM_SUSPEND_MEM        ((__force suspend_state_t) 3) mem Suspend-to-RAM S3 仅保留RAM自刷新 
#define PM_SUSPEND_MAX        ((__force suspend_state_t) 4) disk Suspend-to-disk S4

关闭所有设备包括RAM,也被称为Hibernate

从freeze-->standby-->mem睡眠程度越来越深,唤醒花费的时间也越来越多。

通过写入/sys/power/state不同字符串,可以让系统进入不同睡眠状态。例如下面:

        echo mem > /sys/power/state 让系统进入休眠。
        echo on > /sys/power/state 使系统唤醒。

2 suspend用户空间接口

Linux系统的电源管理Suspend框架跟Linux系统的驱动模型(Linux Driver Model) 是相关的,也是基于Linux的驱动模型来实现的。Linux的Suspend系统分为两部分,一部分是平台无关的核心层,另一个是平台相关的平台层。操作接口都在平台无关的核心层里了。
根据Linux系统驱动模型,device结构描述了一个设备,device_driver是设备的驱动,而class、type和bus分别描述了设备所属的类别、类型和总线。而设备的电源管理也根据此模型分为class级的、type级的、bus级的和驱动级的。如果一个设备的class或者bus确切的知道如何管理一个设备的电源的时候,驱动级别的suspend/resume就可以为空了。这极大的提高了电源管理的高效性和灵活性。

发布了112 篇原创文章 · 获赞 3 · 访问量 9728

猜你喜欢

转载自blog.csdn.net/yush34/article/details/103739475