在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

Linux是休眠/喚醒的步驟解析

454398 ? 來源:博客園 ? 作者:Shimejing ? 2020-10-08 09:52 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Linux中,休眠主要分三個主要的步驟:(1)凍結用戶態進程和內核態任務;(2)調用注冊的設備的suspend的回調函數;(3)按照注冊順序休眠核心設備和使CPU進入休眠態。 凍結進程是內核把進程列表中所有的進程的狀態都設置為停止,并且保存下所有進程的上下文。當這些進程被解凍的時候,他們是不知道自己被凍結過的,只是簡單的繼續執行。如何讓Linux進入休眠呢?用戶可以通過讀寫sys文件/sys /power/state 是實現控制系統進入休眠。比如: # echo standby 》 /sys/power/state命令系統進入休眠。也可以使用 # cat /sys/power/state來得到內核支持哪幾種休眠方式。

Linux Suspend 的流程。相關的文件的路徑: linux_soruce/kernel/power/main.c linux_source/kernel/arch/xxx/mach-xxx/pm.c

linux_source/driver/base/power/main.c

(1)接下來讓我們詳細的看一下Linux是怎么休眠/喚醒的。

用戶對于/sys/power/state 的讀寫會調用到 main.c中的state_store(),用戶可以寫入 const char * const pm_state[] 中定義的字符串,比如“mem”、 “standby”。然后state_store()會調用enter_state(),它首先會檢查一些狀態參數,然后同步文件系統。

(2)準備凍結進程。

當進入到suspend_prepare()中以后,它會給suspend分配一個虛擬終端來輸出信息,然后廣播一個系統要進入suspend的Notify,關閉掉用戶態的helper進程,然后一次調用suspend_freeze_processes()凍結所有的進程,這里會保存所有進程 當前的狀態,也許有一些進程會拒絕進入凍結狀態,當有這樣的進程存在的時候,會導致凍結失敗,此函數就會放棄凍結進程,并且解凍剛才凍結的所有進程。

(3)讓外設進入休眠。

現在,所有的進程(也包括workqueue/kthread) 都已經停止了,內核態任務有可能在停止的時候握有一些信號量,所以如果這時候在外設里面去解鎖這個信號量有可能會發生死鎖,所以在外設的suspend()函數里面作lock/unlock鎖要非常小心,這里建議設計的時候就不要在suspend()里面等待鎖。 最后會調用suspend_devices_and_enter()來把所有的外設休眠,在這個函數中,如果平臺注冊了suspend_pos(通常是在板級定義中定義和注冊),這里就會調用suspend_ops-》begin(),然后driver/base/power/main.c 中的 device_suspend()-》dpm_suspend() 會被調用,他們會依次調用驅動的suspend() 回調來休眠掉所有的設備。當所有的設備休眠以后,suspend_ops-》prepare()會被調用,這個函數通常會作一些準備工作來讓板機進入休眠。接下來Linux,在多核的CPU中的非啟動CPU會被關掉,通過注釋看到是避免這些其他的CPU造成race condion,接下來的以后只有一個CPU在運行了。 suspend_ops 是板級的電源管理操作,通常注冊在文件 arch/xxx/mach-xxx/pm.c 中。接下來,suspend_enter()會被調用,這個函數會關閉arch irq,調用 device_power_down(),它會調用suspend_late()函數,這個函數是系統真正進入休眠最后調用的函數,通常會在這個函數中作最后的檢查。如果檢查沒問題,接下來休眠所有的系統設備和總線,并且調用 suspend_pos-》enter() 來使CPU進入省電狀態。這時候,就已經休眠了,代碼的執行也就停在這里了。

(4)Resume。

如果在休眠中系統被中斷或者其他事件喚醒,接下來的代碼就會開始執行,這個喚醒的順序是和休眠的順序相反的,所以系統設備和總線會首先喚醒,使能系統中斷,使能休眠時候停止掉的非啟動CPU,以及調用suspend_ops-》finish(),而且在suspend_devices_and_enter()函數中也會繼續喚醒每個設備,使能虛擬終端。最后調用 suspend_ops-》end()。再返回到enter_state()函數中的,當suspend_devices_and_enter() 返回以后,外設已經喚醒了,但是進程和任務都還是凍結狀態,這里會調用suspend_finish()來解凍這些進程和任務,而且發出Notify來表示系統已經從suspend狀態退出,喚醒終端。到這里,所有的休眠和喚醒就已經完畢了,系統繼續運行了。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • cpu
    cpu
    +關注

    關注

    68

    文章

    11069

    瀏覽量

    216712
  • Linux
    +關注

    關注

    87

    文章

    11506

    瀏覽量

    213416
  • 休眠
    +關注

    關注

    0

    文章

    5

    瀏覽量

    8567
  • 休眠喚醒
    +關注

    關注

    0

    文章

    8

    瀏覽量

    7670
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    干貨分享 | TSMaster—LIN 喚醒休眠機制

    在汽車總線中常見的喚醒方式有硬線喚醒、網絡喚醒和特定信號喚醒,而LIN總線則是通過休眠幀與喚醒
    的頭像 發表于 09-25 08:03 ?3238次閱讀
    干貨分享 | TSMaster—LIN <b class='flag-5'>喚醒</b>與<b class='flag-5'>休眠</b>機制

    解析OMAPL138的休眠喚醒的過程!

    外設的PSC!現在不知道是什么原因!麻煩你們看一下這個問題! 或者有什么參考的例子! 可以詳細的說一下OMAPL138的休眠喚醒的過程!謝謝了!
    發表于 08-22 12:51

    如何作休眠定時喚醒

    芯片休眠前,打開全局中斷使能和定時器0中斷使能,定時器0時鐘源選擇內部32768 WDT時鐘,僅當內部WDT晶振打開時有效,芯片通過定時器0間斷喚醒。這樣休眠功耗較低,增加5uA左右。
    發表于 03-24 14:03

    Wi-Fi休眠喚醒失敗的問題該如何去解決呢

    R18公板使用RTL8723ds模組,通過Wi-Fi ping的方式喚醒失敗。Wi-Fi喚醒的一般測試步驟有哪些呢?Wi-Fi休眠喚醒失敗的
    發表于 12-29 06:35

    CH582M freeRTOS如何實現休眠休眠后如何喚醒

    有以下以后望解答:如何實現休眠休眠后如何喚醒?目前嘗試用裸機例程中的休眠函數,僅LowPower_Shutdown(0); 可以正常睡眠并且成功
    發表于 08-01 06:19

    lightsleep休眠不同喚醒方式的功耗問題求解

    我用arduino對esp32c3開發板進行編程測試lightsleep的休眠功耗,GPIO2口接紅外,發現了一個問題,當我僅使用GPIO喚醒時,休眠后電流為5.16ma,僅使用Timer喚醒
    發表于 03-07 07:07

    基于S3C2440和WindowsCE5.0的平臺休眠喚醒方案

    ]。Windows CE 作為一個廣泛應用于嵌入式設備上的操作系統,提供了完善的電源管理功能。其中,休眠喚醒便是一個重要的功能。本文在結合S3C2440硬件基礎上分析休眠喚醒過程,分別
    發表于 10-31 15:51 ?0次下載
    基于S3C2440和WindowsCE5.0的平臺<b class='flag-5'>休眠</b><b class='flag-5'>喚醒</b>方案

    MSP430休眠喚醒裝置設計詳析

    針對礦用救災指揮裝置網絡視頻服務器采用電池供電工作時間短的缺點, 采用 MSP430 低功耗單片機設計了一種休眠喚醒裝置, 實現了網絡視頻服務器的休眠喚醒功能, 延長了網絡視頻服務器電
    發表于 04-24 14:27 ?14次下載
    MSP430<b class='flag-5'>休眠</b><b class='flag-5'>喚醒</b>裝置設計詳析

    Linux Kernel suspend/resume 過程

    休眠/喚醒在嵌入式Linux中是非常重要的部分,嵌入式設備盡可能的進入休眠狀 態來延長電池的續航時間.這篇文章就詳細介紹一下Linux
    發表于 05-08 14:25 ?2344次閱讀

    單片機休眠喚醒二三事

    想知道單片機休眠如何像吃了德芙一樣絲滑么?想讓你的單片機產品在合適的時候休眠待機不再失眠么?想讓你的單片機項目隨叫隨醒不再怠惰長眠么?答案-關于單片機休眠喚醒的配置都在這里了
    發表于 12-20 19:00 ?24次下載
    單片機<b class='flag-5'>休眠</b>與<b class='flag-5'>喚醒</b>二三事

    LIN控制器休眠喚醒類型方式及測試案例

    雖然新架構的發展促進著通信技術的升級換代,但作為車載通信技術的常青樹之一的LIN通信,由于其自身的特點,將會繼續發光發熱。其中LIN的休眠喚醒作為整車休眠喚醒的重要組成部分,需引起開發
    的頭像 發表于 12-16 09:18 ?2449次閱讀

    ECU系統休眠后通過診斷報文喚醒ECU且喚醒網絡

    ECU系統休眠后TJA1043的INH腳處于floating高阻態,系統休眠后通過硬件外部電路下拉到低電平狀態/Low-level,ECU系統休眠前把TJA1043的INH腳配置為喚醒
    的頭像 發表于 04-04 09:40 ?1w次閱讀

    LIN休眠喚醒及測試心得

    這次我們的介紹主題是LIN休眠喚醒,一起看看標準和差異性,開發和測試的關系,實際的案例分享也來了。
    的頭像 發表于 11-23 08:43 ?1674次閱讀
    LIN<b class='flag-5'>休眠</b><b class='flag-5'>喚醒</b>及測試心得

    以太網休眠喚醒利器OPEN Alliance TC10介紹

    TC10 為OPEN Alliance 中的一個技術委員會小組,專注于研究基于車載以太網的休眠喚醒機制,旨在為汽車應用場景提供靈活的休眠喚醒解決方案。
    的頭像 發表于 02-13 09:06 ?699次閱讀
    以太網<b class='flag-5'>休眠</b><b class='flag-5'>喚醒</b>利器OPEN Alliance TC10介紹

    TC10以太網休眠喚醒測試詳細指南!

    休眠喚醒互操作性測試是確保車載以太網設備在低功耗模式下正常工作的關鍵步驟。通過詳細的測試用例和嚴格的通過標準,OPEN Alliance的測試規范確保了不同廠商設備之間的互操作性。
    的頭像 發表于 02-18 10:00 ?831次閱讀
    TC10以太網<b class='flag-5'>休眠</b><b class='flag-5'>喚醒</b>測試詳細指南!
    主站蜘蛛池模板: 69日本xxxhd | 一级毛片在线不卡直接观看 | 手机在线看片福利盒子 | 2018天天干天天射 | tube性欧美另类 | 无毒在线| 国产精品久久自在自2021 | 国产精品久久久久久久久免费hd | 国产亚洲欧美日韩俺去了 | 国产拍拍1000部ww | 亚洲日本色图 | 中文字幕国产一区 | 天堂中文www在线 | 亚洲天堂资源网 | 美女视频网站色 | 乱妇伦小说 | 色婷婷视频在线 | 九九热精品视频在线播放 | 激情综合五月婷婷 | 日本三级视频 | 免费在线观看a视频 | 午夜亚洲福利 | 免费国产小视频 | 四虎.com| 手机看片福利1024 | 狠狠操狠狠 | 狠狠色狠狠色综合 | 看黄a大片 免费 | 四虎最新紧急入口 | 成人伊人亚洲人综合网站222 | 国产在线观看黄 | 国产美女一级视频 | 免费能看的黄色网址 | 免费网站你懂得 | 免费在线视频播放 | www淫 | 绝色村妇的泛滥春情 | 狠狠操亚洲 | 花怜write. as| h在线免费观看 | 五月天婷婷丁香花 |