0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

wakeup events framework三大功能介紹

麥辣雞腿堡 ? 來源:嵌入式Linux系統(tǒng)開發(fā) ? 作者:蝸窩科技 ? 2023-09-11 16:21 ? 次閱讀

wakeup events framework 就包括 3 大功能:

1. 解決內(nèi)核空間同步問題(framework 的核心功能)

2. 解決用戶空間同步問題的情景1(wakeup count 功能)

3. 解決用戶空間同步問題的情景2(wake lock 功能)

wakeup events framework architecture

wakeup count 的功能

wakeup count 的功能是 suspend 同步,實現(xiàn)思路是這樣的:

1)任何想發(fā)起電源狀態(tài)切換的實體(可以是用戶空間電源管理進程,也可以是內(nèi)核線程,簡稱 C),在發(fā)起狀態(tài)切換前,讀取系統(tǒng)的 wakeup counts(該值記錄了當前的 wakeup event 總數(shù)),并將讀取的 counts 告知 wakeup events framework。

2)wakeup events framework 記錄該 counts 到一個全局變量中(saved_count)。

3)隨后 C 發(fā)起電源狀態(tài)切換(如 STR),執(zhí)行 suspend 過程。

4)在 suspend 的過程中,wakeup events framework 照舊工作(直到系統(tǒng)中斷被關(guān)閉),上報 wakeup events,增加 wakeup events counts。

5)suspend 執(zhí)行的一些時間點,會調(diào)用 wakeup events framework 提供的接口(pm_wakeup_pending),檢查是否有 wakeup 沒有處理。

6)檢查邏輯很簡單,就是比較當前的 wakeup counts 和 saved wakeup counts(C 發(fā)起電源狀態(tài)切換時的 counts),如果不同,就要終止 suspend 過程。

wakelocks

wakelocks 是一個有故事的功能。

wakelocks 最初出現(xiàn)在 Androidlinux kernel 打的一個補丁集上,該補丁集實現(xiàn)了一個名稱為“wakelocks”的系統(tǒng)調(diào)用,該系統(tǒng)調(diào)用允許調(diào)用者阻止系統(tǒng)進入低功耗模式(如 idle、suspend 等)。同時,該補丁集更改了 Linux kernel 原生的電源管理執(zhí)行過程(/kernel/power/main.c 中的 state_show 和 state_store),轉(zhuǎn)而執(zhí)行自定義的 state_show、state_store。

這種做法是相當不規(guī)范的,它是典型的只求實現(xiàn)功能,不擇手段。就像國內(nèi)很多的 Linux 開發(fā)團隊,要實現(xiàn)某個功能,都不去弄清楚 kernel 現(xiàn)有的機制、框架,牛逼哄哄的猛干一番。最后功能是實現(xiàn)了,可都不知道重復造了多少輪子,浪費了多少資源。

kernel 的開發(fā)者是有原則的,不讓這種機制合并到 kernel 分支,直到 kernel 自身的 wakeup events framework 成熟后,這種僵局才被打破。因為 Android 開發(fā)者想到了一個壞點子:不讓合并就不讓合并唄,我用你的機制(wakeup source),再實現(xiàn)一個就是了。至此,全新的 wakelocks 出現(xiàn)了。

所以 wakelocks 有兩個,早期 Android 版本的 wakelocks 幾乎已經(jīng)銷聲匿跡了。本文關(guān)注在新的 wakelocks 上(/kernel/power/wakelock.c)

Android wakelocks

但是,我們還是提一下 Android wakelocks 的功能,這樣才能知道 kernel wakelocks 要做什么。Android wakelocks 提供的功能包括:

1)一個 sysfs 文件:/sys/power/wake_lock,用戶程序向文件寫入一個字符串,即可創(chuàng)建一個 wakelock,該字符串就是 wakelock 的名字。該 wakelock 可以阻止系統(tǒng)進入低功耗模式。

2)一個 sysfs 文件:/sys/power/wake_unlock,用戶程序向文件寫入相同的字符串,即可注銷一個 wakelock。

3)當系統(tǒng)中所有的 wakelock 都注銷后,系統(tǒng)可以自動進入低功耗狀態(tài)。

4)向內(nèi)核其它 driver 也提供了 wakelock 的創(chuàng)建和注銷接口,允許 driver 創(chuàng)建 wakelock 以阻止睡眠、注銷 wakelock 以允許睡眠。

Kernel wakelocks

1)允許 driver 創(chuàng)建 wakelock 以阻止睡眠、注銷 wakelock 以允許睡眠:已經(jīng)由 wakeup source 取代。

2)當系統(tǒng)中所有的 wakelock 都注銷后,系統(tǒng)可以自動進入低功耗狀態(tài):由 autosleep 實現(xiàn)。

3)wake_lock 和 wake_unlock 功能:就是將 wakeup source 開發(fā)到用戶空間訪問。

autosleep 的功能很直白,“系統(tǒng)沒有事情在做”的時候,就將系統(tǒng)切換到低功耗狀態(tài)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5052

    文章

    18909

    瀏覽量

    300723
  • Android
    +關(guān)注

    關(guān)注

    12

    文章

    3908

    瀏覽量

    126908
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    8355

    瀏覽量

    150515
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11161

    瀏覽量

    208461
收藏 人收藏

    評論

    相關(guān)推薦

    .Net Micro Framework 快速入門

    Framework研究—串口部署釋疑26、.Net Micro Framework研究—FAT文件系統(tǒng)實現(xiàn)探索 、系統(tǒng)移植1、【.Net Micro Framework Porti
    發(fā)表于 05-29 10:56

    sushu---Actor Framework基本介紹

    一練]Actor Framework框架(1125-1201)2016-02-28 20:15:20新寫的一篇帖子:sushu---Actor Framework一種使用方式主貼里面循序漸進的介紹了一些信息?,F(xiàn)在
    發(fā)表于 01-03 20:05

    示波器的大功能是哪些? 它們是怎樣組合在一起的?

    示波器的大功能是哪些?示波器的大功能是怎樣組合在一起的?
    發(fā)表于 05-08 08:06

    stm32的引腳wakeup有什么作用

    stm32的引腳wakeup有什么作用?喚醒MCU,比如當MCU在低功耗狀態(tài)下或者休眠之類的狀態(tài)下,通過引腳的Wakeup功能可以將MCU喚醒,讓MCU進入正常的工作狀態(tài)。低功耗模式、休眠模式
    發(fā)表于 08-16 08:15

    .NET Micro Framework開發(fā)板介紹

    哪些領(lǐng)域可以采用.NET Micro Framework技術(shù)?NET Micro Framework與Window CE和Windows XP Embedded的區(qū)別在哪?
    發(fā)表于 10-11 08:31

    .NET Framework 高級編程

    .NET Framework 高級編程詳細講述了.NET Framework,是一本極具參考價值的.NET Framework編程大全。本書從.NET Framework最基本的概念到
    發(fā)表于 01-08 11:04 ?40次下載
    .NET <b class='flag-5'>Framework</b> 高級編程

    基于Microsoft .NET Framework的OPC

    介紹了OPC (OLE for Process Control) Data Access 規(guī)范基本內(nèi)容Microsoft .NetFramework 特點?;贛icrosoft .Net Framework 2.0 介紹了托管
    發(fā)表于 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
    發(fā)表于 02-06 10:42 ?23次下載

    Linux電源管理總體框架及實現(xiàn)原理

    suspend過程中,有可能會發(fā)生wakeup events,所以某些時間點,會調(diào)用接口(pm_wakeup_pending),檢查是否有wakeup需要處理
    發(fā)表于 09-14 17:00 ?4652次閱讀
    Linux電源管理總體框架及實現(xiàn)原理

    專題分綱目錄 Android Framework 電源子系統(tǒng)

    專題分綱目錄 均為索引,本綱為:Android Framework 電源子系統(tǒng) 系列文章目錄Android Framework 電源子系統(tǒng)(01)PowerManagerService啟動分析
    發(fā)表于 01-11 12:07 ?0次下載
    專題分綱目錄 Android <b class='flag-5'>Framework</b> 電源子系統(tǒng)

    Android Framework 電源子系統(tǒng)(06)電池管理

    系列文章解讀&說明:Android Framework 電源子系統(tǒng) 的分析主要分為以下部分:Android Framework 電源子系統(tǒng)(01)PowerManagerService啟動
    發(fā)表于 01-11 14:58 ?1次下載
    Android <b class='flag-5'>Framework</b> 電源子系統(tǒng)(06)電池管理

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

    在《RTA-OS系列介紹-Task》部分我們介紹了任務(wù)分為基礎(chǔ)任務(wù)與擴展任務(wù),兩者的主要區(qū)別為,擴展任務(wù)多了waiting狀態(tài),那Waiting狀態(tài)等待的是什么呢?其實就是我們今天要介紹
    的頭像 發(fā)表于 01-12 10:27 ?5198次閱讀

    SystemVerilog里的regions以及events的調(diào)度

    本文講一下SystemVerilog的time slot里的regions以及events的調(diào)度。SystemVerilog語言是根據(jù)離散事件執(zhí)行模型定義的,由events驅(qū)動。
    的頭像 發(fā)表于 07-12 11:20 ?1393次閱讀
    SystemVerilog里的regions以及<b class='flag-5'>events</b>的調(diào)度

    Wakeup events framework同步問題

    Wakeup events framework 系統(tǒng)處于 suspend 狀態(tài),可通過 wakeup events 喚醒。具體的
    的頭像 發(fā)表于 09-11 16:17 ?433次閱讀

    framework框架流程 模塊綁定

    framework框架負責固件的通用流程實現(xiàn),包括系統(tǒng)初始化,module初始化,中斷服務(wù)提供,event服務(wù)提供等。這樣module就可以專注于自己功能和對外交互api的實現(xiàn)。SCP
    的頭像 發(fā)表于 11-02 17:24 ?572次閱讀
    <b class='flag-5'>framework</b>框架流程 模塊綁定