您的位置 首页 设计

Linux电源办理整体结构及完成原理

Linux电源管理总体框架及实现原理-suspend过程中,有可能会发生wakeup events,所以某些时间点,会调用接口(pm_wakeup_pending),检查是否有wakeup需要处理

整体的结构

wakeup events framework首要包括 wake lock, wakeup count, autosleep等机制体系在suspend进程中的时分,当wakeup事情产生的时分,不能进入suspend状况,wakeup event framework便是处理用户空间和内核空间的同步问题的,包括下面状况

1. 驱动处理进程中,不允许进入suspend

2. 后续需求处理的用户进程,不会获取到wakeup events

3. 正在后续处理的用户进程,处理进程中,体系不能进入suspend

整体结构如下:

wakeup events framework core便是linux关于wakeup event的中心结构,首要向驱动供给唤醒源注册,使能等接口。向上层供给上报,中止等接口,还有关于PM core的状况查询接口

sysfs文件

wake lock/unlock 供给给用户层面,能够阻挠体系进入suspend的一个接口

wakeup count,用户上层用户查询wakeup event的一个接口

auto sleep便是设定体系没活动时,主动休眠的接口

关于wakeup source和wakeup event

1. 只要具有唤醒功用的设备才干作为wakeup source,具有唤醒功用的设备会被标识为唤醒才能,经过设备结构里边的can_wakeup标志标识,而且会在sysfs目录下有关于wakeup信息的文件存在

2. 具有唤醒功用的设备首要和 dev_pm_info结构有关

3. 一个wakeup source的设备,首要虚拟为结构体struct wakeup_source结构

View Code

关于wakeup event framework中心功用

1. __pm_stay_awake : wakeup source 切换为active状况的接口

2. __pm_relax: wakeup source 切换为disacTIve状况的接口

3. __pm_wakeup_event: 上边两个接口的结合体,引入了时刻操控

关于驱动设备常用的接口:

View Code

wakeup count

首要用于处理system suspend 和system wakeup events之间的同步问题

wakeup count给上层供给了sysfs接口,给auto sleep供给了接口

完成的原理

1. 产生电源切换的实体先读取体系的wakeup count变量,而且奉告wakeup events framework。

2. framework core保存这个变量到saved_count中

3. suspend进程中,有可能会产生wakeup events,所以某些时刻点,会调用接口(pm_wakeup_pending),查看是否有wakeup需求处理

4. 如果有,代表读出来wakeup count 和saved_count不一样,这时需求停止suspend的进程

当调用相似 read(&cnt, “/sys/power/wakeup_count”); 的时分,体系终究会调用pm_get_wakeup_count

调用 write(cnt, “/sys/power/wakeup_count”)的时分,体系终究会调用 pm_save_wakeup_count

pm_get_wakeup_count的首要完成:

View Code

pm_save_wakeup_count的首要完成

View Code

前面的suspend进程中,最终阶段会调用suspend_enter函数:

View Code

里边调用的pm_wakeup_pending,首要是:

View Code

以上便是wakeup在用户层和suspend进程中的运用方法

wake_lock/wake_unlock

sysfs下的 /sys/power/wake_lock & /sys/power/wake_unlock

整体的结构

代码剖析

wakeup_lock/wakeup_unlock的接口首要是下面的四个函数

View Code

其 中pm_show_wakelocks 表明

View Code

关于 pm_wake_lock 表明

View Code

关于pm_wake_unlock表明

View Code

wakelock的废物收回机制

首要考虑到wakeup events 树立,毁掉,树立的进程太频频,功率就会下降,所以引入了wakeuplock的废物收回机制

首要的原理是:

先保存一些非acTIve状况的wakelocks,等保存的wakelock的数量抵达某一个界说的最大值时,则从尾部开端,顺次取出wakelock,判别idle的时刻,进行刊出和开释memory资源

Auto Sleep

概念:

当体系没有了正在处理和新增的wakeup events时,就测验suspend

整体的结构为:

1. sysfs关于autosleep的接口 /sys/power/autosleep

这个sysfs文件的读取 函数 autosleep_show:

View Code

2. 关于autosleep的初始化

关于 pm_autosleep_init

View Code

3. 设置 autosleep的状况

View Code

与之有关的函数pm_wakep_autosleep_enabled

View Code

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/sheji/93362.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部