Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 電源管理之android系統suspend to disk的實現(一)

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

編輯:關於Android編程

最近剛剛做了一份關於電源管理中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


  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved