電源管理之android系統suspend to disk的實現(一)

來源:互聯網
上載者:User

最近剛剛做了一份關於電源管理中android系統suspend to disk的實現研究學習報告,最近比較清閑就簡單做了整理。

我是基於北京君正jz4780grus開發板做的探究,我將要在這幾天按照下面做一個學習報告,其內容如下所示:

一、Linux休眠/喚醒簡介

1、介紹Linux系統的Suspend的四種狀態

2、Linux系統的休眠的步驟

3、使用者空間介面

4、Linux Suspend 的流程

5、Linux Resume流程

二、Android 休眠(suspend)介紹

1、android系統休眠的簡單介紹

2、android系統休眠涉及的幾個特點

3、Android的suspend執行流程

4、Android的wake Lock執行流程

5、Android於標準Linux休眠的區別

三、android系統休眠(suspend to RAM)執行流程圖

四、android系統休眠(hibernation)執行流程圖

五、我實現的方案比較,及實現方式

六、測試資料以及問題解決方案

下面我就開始介紹了:

電源管理

前言:

待機
電腦將目前的運行狀態等資料存放在記憶體,關閉硬碟、外設等裝置,進入等待狀態。此時記憶體仍然需要電力維持其資料,但整機耗電很少。恢複時電腦從記憶體讀出資料,回到掛起前的狀態,恢複速度較快。一般筆記本在電池無故障且充滿的情況下可以支援這種掛起數小時甚至數天(依具體機型有差別)。
其他名稱:Suspend, STR(Suspend To RAM), 掛起, 掛起到記憶體
休眠
電腦將目前的運行狀態等資料存放在硬碟上某個檔案或者某個特定的地區,關閉硬碟、外設等裝置,進入關機狀態。此時電腦完全關閉,不耗電。恢複時電腦從休眠檔案/分區中讀出資料,回到休眠前的狀態,恢複速度較慢。但由於這種方法完全耗電又能儲存工作狀態,往往被筆記本使用者用來作為關機的替代方式。
其他名稱:Hibernation, STD(Suspend To Disk), 掛起到硬碟, 休眠到硬碟

休眠/喚醒在嵌入式Linux中是非常重要的部分,它的作用可以分為以下兩點:

1、通過進入休眠狀態來延長電池的續航時間;

2、通過休眠實現快速啟動;

接下來就詳細介紹一下Linux中休眠/喚醒是如何工作的,還有Android中如何把這部分和Linux的機制聯絡起來的.

一、Linux休眠/喚醒簡介

1、Linux系統的Suspend的四種狀態

Suspend/Resume是Linux系統電源管理的一個重要功能,Suspend可以在系統不使用的情況下進入低功耗活休眠狀態下從而節省系統電源。Linux系統的Suspend有四種狀態,對於不同的體繫結構或者電源管理介面來說,狀態的含義不一定完全相同,但是不會有太大的差別。下面的是ACPI電源介面的含義及其對應的Sleep State。

- On(on) S0 - Working

- Standby (standby) S1 -CPU and RAM are powered but not executed

- Suspend to RAM(mem) S3 - RAMis powered and the running content is saved to RAM

- Suspend to Disk,Hibernation(disk) S4 - All contect is saved to Diskand power down

2、Linux系統的休眠的步驟

在Linux中,休眠主要分三個主要的步驟:

1)凍結使用者態進程和核心態任務

2)調用註冊的裝置的suspend的回呼函數,順序是按照註冊順序

3)休眠核心裝置和使CPU進入休眠態凍結進程是核心把進程列表中所有的進程的狀態都設定為停止,並且儲存所有進程的環境。當這些進程被解凍的時候,他們是不知道自己被凍結過的,只是簡單的繼續執行。

3、使用者空間介面

如何讓Linux進入休眠呢?

首先我們通常先通過# cat/sys/power/state來得到核心支援哪幾種休眠方式。

然後我們來看一下suspend的使用者空間介面,這是一個/sys檔案系統介面,介面檔案是/sys/power/state。這是我們在使用者空間操作Suspend的唯一的一個介面。當我們向這個檔案寫入想要進入的有效suspend狀態的時候,系統就會調用Suspend函數進入到一個有效suspend狀態。比如我們向這個檔案寫入disk就會使系統進入Suspend to RAM狀態,如下的命令:

echo disk > /sys/power/state //讓系統進入休眠狀態

更通俗的講就是,使用者對於/sys/power/state 的讀寫會調用到 main.c中的state_store(),使用者可以寫入 const char * const pm_state[] 中定義的字串,比如"mem"、 "standby",''disk''。只是standby耗電更多,返回到正常工作狀態的時間更短。

然後state_store()會調用enter_state(),它首先會檢查一些狀態參數,然後同步檔案系統。

未完待續!!

個人觀點,有問題請斧正!!

轉載請註明出處:http://blog.csdn.net/wang_zheng_kai


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.