全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 嵌入式技术 >

wakeup events framework三大功能介绍

时间:2023-09-11 16:21

人气:

作者:admin

标签: Android  接口 

导读:wakeup events framework 就包括 3 大功能: 1. 解决内核空间同步问题(framework 的核心功能)        2. 解决用户空间同步问题的情景1(wakeup count 功能)        3. 解决用户空间同步问题的情...

wakeup events framework 就包括 3 大功能:

1. 解决内核空间同步问题(framework 的核心功能)

2. 解决用户空间同步问题的情景1(wakeup count 功能)

3. 解决用户空间同步问题的情景2(wake lock 功能)

wakeup events framework architecture

wakeup count 的功能

wakeup count 的功能是 suspend 同步,实现思路是这样的:

1)任何想发起电源状态切换的实体(可以是用户空间电源管理进程,也可以是内核线程,简称 C),在发起状态切换前,读取系统的 wakeup counts(该值记录了当前的 wakeup event 总数),并将读取的 counts 告知 wakeup events framework。

2)wakeup events framework 记录该 counts 到一个全局变量中(saved_count)。

3)随后 C 发起电源状态切换(如 STR),执行 suspend 过程。

4)在 suspend 的过程中,wakeup events framework 照旧工作(直到系统中断被关闭),上报 wakeup events,增加 wakeup events counts。

5)suspend 执行的一些时间点,会调用 wakeup events framework 提供的接口(pm_wakeup_pending),检查是否有 wakeup 没有处理。

6)检查逻辑很简单,就是比较当前的 wakeup counts 和 saved wakeup counts(C 发起电源状态切换时的 counts),如果不同,就要终止 suspend 过程。

wakelocks

wakelocks 是一个有故事的功能。

wakelocks 最初出现在 Androidlinux kernel 打的一个补丁集上,该补丁集实现了一个名称为“wakelocks”的系统调用,该系统调用允许调用者阻止系统进入低功耗模式(如 idle、suspend 等)。同时,该补丁集更改了 Linux kernel 原生的电源管理执行过程(/kernel/power/main.c 中的 state_show 和 state_store),转而执行自定义的 state_show、state_store。

这种做法是相当不规范的,它是典型的只求实现功能,不择手段。就像国内很多的 Linux 开发团队,要实现某个功能,都不去弄清楚 kernel 现有的机制、框架,牛逼哄哄的猛干一番。最后功能是实现了,可都不知道重复造了多少轮子,浪费了多少资源。

kernel 的开发者是有原则的,不让这种机制合并到 kernel 分支,直到 kernel 自身的 wakeup events framework 成熟后,这种僵局才被打破。因为 Android 开发者想到了一个坏点子:不让合并就不让合并呗,我用你的机制(wakeup source),再实现一个就是了。至此,全新的 wakelocks 出现了。

所以 wakelocks 有两个,早期 Android 版本的 wakelocks 几乎已经销声匿迹了。本文关注在新的 wakelocks 上(/kernel/power/wakelock.c)

Android wakelocks

但是,我们还是提一下 Android wakelocks 的功能,这样才能知道 kernel wakelocks 要做什么。Android wakelocks 提供的功能包括:

1)一个 sysfs 文件:/sys/power/wake_lock,用户程序向文件写入一个字符串,即可创建一个 wakelock,该字符串就是 wakelock 的名字。该 wakelock 可以阻止系统进入低功耗模式。

2)一个 sysfs 文件:/sys/power/wake_unlock,用户程序向文件写入相同的字符串,即可注销一个 wakelock。

3)当系统中所有的 wakelock 都注销后,系统可以自动进入低功耗状态。

4)向内核其它 driver 也提供了 wakelock 的创建和注销接口,允许 driver 创建 wakelock 以阻止睡眠、注销 wakelock 以允许睡眠。

Kernel wakelocks

1)允许 driver 创建 wakelock 以阻止睡眠、注销 wakelock 以允许睡眠:已经由 wakeup source 取代。

2)当系统中所有的 wakelock 都注销后,系统可以自动进入低功耗状态:由 autosleep 实现。

3)wake_lock 和 wake_unlock 功能:就是将 wakeup source 开发到用户空间访问。

autosleep 的功能很直白,“系统没有事情在做”的时候,就将系统切换到低功耗状态。

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信