Android知识点 107 —— 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 LinuxLabelstateACPI state注释
#define PM_SUSPEND_ON        ((__force suspend_state_t) 0)    一切正常
#define PM_SUSPEND_FREEZE    ((__force suspend_state_t) 1)freezeSuspend-to-IdleS0冻结进程+挂起设备+CPU空闲 
#define PM_SUSPEND_STANDBY    ((__force suspend_state_t) 2)standbyStandby/Power-on SuspendS1冻结进程+挂起设备+关闭nonbootCPU 
#define PM_SUSPEND_MEM        ((__force suspend_state_t) 3)memSuspend-to-RAMS3仅保留RAM自刷新 
#define PM_SUSPEND_MAX        ((__force suspend_state_t) 4)diskSuspend-to-diskS4

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

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

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

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

cat  /sys/power/wake_lock   查看锁

echo   *************   /sys/power/wake_unlock  释放某一个锁。

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就可以为空了。这极大的提高了电源管理的高效性和灵活性。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值