0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

wakeup events framework三大功能介绍

麦辣鸡腿堡 来源:嵌入式Linux系统开发 作者:蜗窝科技 2023-09-11 16:21 次阅读

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 的功能很直白,“系统没有事情在做”的时候,就将系统切换到低功耗状态。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5068

    文章

    19014

    浏览量

    303212
  • Android
    +关注

    关注

    12

    文章

    3923

    浏览量

    127127
  • 接口
    +关注

    关注

    33

    文章

    8496

    浏览量

    150826
  • Linux
    +关注

    关注

    87

    文章

    11225

    浏览量

    208909
收藏 人收藏

    评论

    相关推荐

    .Net Micro Framework 快速入门

    Framework研究—串口部署释疑26、.Net Micro Framework研究—FAT文件系统实现探索 、系统移植1、【.Net Micro Framework Porti
    发表于 05-29 10:56

    sushu---Actor Framework基本介绍

    一练]Actor Framework框架(1125-1201)2016-02-28 20:15:20新写的一篇帖子:sushu---Actor Framework一种使用方式主贴里面循序渐进的介绍了一些信息。现在
    发表于 01-03 20:05

    示波器的大功能是哪些? 它们是怎样组合在一起的?

    示波器的大功能是哪些?示波器的大功能是怎样组合在一起的?
    发表于 05-08 08:06

    stm32的引脚wakeup有什么作用

    stm32的引脚wakeup有什么作用?唤醒MCU,比如当MCU在低功耗状态下或者休眠之类的状态下,通过引脚的Wakeup功能可以将MCU唤醒,让MCU进入正常的工作状态。低功耗模式、休眠模式
    发表于 08-16 08:15

    .NET Micro Framework开发板介绍

    哪些领域可以采用.NET Micro Framework技术?NET Micro Framework与Window CE和Windows XP Embedded的区别在哪?
    发表于 10-11 08:31

    .NET Framework 高级编程

    .NET Framework 高级编程详细讲述了.NET Framework,是一本极具参考价值的.NET Framework编程大全。本书从.NET Framework最基本的概念到
    发表于 01-08 11:04 40次下载
    .NET <b class='flag-5'>Framework</b> 高级编程

    基于Microsoft .NET Framework的OPC

    介绍了OPC (OLE for Process Control) Data Access 规范基本内容Microsoft .NetFramework 特点。基于Microsoft .Net Framework 2.0 介绍了托管
    发表于 05-25 13:57 22次下载

    Meter Design for Power Failure Events

    and polyphase residential energy-metering SoCs that cope with sag and power-failure events. The sample code discussed in this application note was w
    发表于 02-06 10:42 23次下载

    Linux电源管理总体框架及实现原理

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

    专题分纲目录 Android Framework 电源子系统

    专题分纲目录 均为索引,本纲为:Android Framework 电源子系统 系列文章目录Android Framework 电源子系统(01)PowerManagerService启动分析
    发表于 01-11 12:07 0次下载
    专题分纲目录 Android <b class='flag-5'>Framework</b> 电源子系统

    Android Framework 电源子系统(06)电池管理

    系列文章解读&说明:Android Framework 电源子系统 的分析主要分为以下部分:Android Framework 电源子系统(01)PowerManagerService启动
    发表于 01-11 14:58 1次下载
    Android <b class='flag-5'>Framework</b> 电源子系统(06)电池管理

    Events(事件)概述、配置及使用方法

    在《RTA-OS系列介绍-Task》部分我们介绍了任务分为基础任务与扩展任务,两者的主要区别为,扩展任务多了waiting状态,那Waiting状态等待的是什么呢?其实就是我们今天要介绍
    的头像 发表于 01-12 10:27 5487次阅读

    SystemVerilog里的regions以及events的调度

    本文讲一下SystemVerilog的time slot里的regions以及events的调度。SystemVerilog语言是根据离散事件执行模型定义的,由events驱动。
    的头像 发表于 07-12 11:20 1481次阅读
    SystemVerilog里的regions以及<b class='flag-5'>events</b>的调度

    Wakeup events framework同步问题

    Wakeup events framework 系统处于 suspend 状态,可通过 wakeup events 唤醒。具体的
    的头像 发表于 09-11 16:17 468次阅读

    framework框架流程 模块绑定

    framework框架负责固件的通用流程实现,包括系统初始化,module初始化,中断服务提供,event服务提供等。这样module就可以专注于自己功能和对外交互api的实现。SCP
    的头像 发表于 11-02 17:24 627次阅读
    <b class='flag-5'>framework</b>框架流程 模块绑定