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

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

編輯:關於Android編程

二、Android 休眠(suspend)介紹

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

android系統用的也是linux內核,但是他也是有不同的,由於它的特殊性,故代碼在linux內核休眠基礎上進行了整改。

下面是對android內核已經實現的suspend做一個講解,suspend to disk將會在調試的文件中涉及。

在一個打過android補丁的內核中,state_store()函數會走另外一條路,會進入到request_suspend_state()中,這個文件在earlysuspend.c中.這些功能都是android系統加的,後面會對earlysuspend和lateresume進行介紹。

涉及到的文件:

android4.1/kernel/power/main.c

android4.1/kernel/power/earlysuspend.c

android4.1/kernel/power/wakelock.c

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

下面介紹幾個android系統涉及的比較獨特的特性

1)EarlySuspend

Early suspend是android引進的一種機制,這個機制作用在關閉顯示的時候,一些和顯示有關的設備,比如LCD背光,重力感應器,觸摸屏,這些設備都會關掉,但是系統可能還是在運行狀態(這時候還有wakelock)進行任務的處理,例如在掃描SD卡上的文件等.在嵌入式設備中,背光是一個很大的電源消耗,所以android會加入這樣一種機制。

2)LateResume

Late Resume是和suspend配套的一種機制,是在內核喚醒完畢開始執行的,主要就是喚醒在EarlySuspend的時候休眠的設備.當所有的喚醒已經結束以後,用戶進程都已經開始運行了,喚醒通常會是以下的幾種原因:

來電

如果是來電,那麼Modem會通過發送命令給rild來讓rild通知WindowManager有來電響應,這樣就會遠程調用PowerManagerService來寫"on"到/sys/power/state來執行lateresume的設備,比如點亮屏幕等.

用戶按鍵用戶按鍵事件會送到WindowManager中,WindowManager會處理這些按鍵事件,按鍵分為幾種情況,如果案件不是喚醒鍵(能夠喚醒系統的按鍵)那麼WindowManager會主動放棄wakeLock來使系統進入再次休眠,如果按鍵是喚醒鍵,那麼WindowManger就會調用PowerManagerService中的接口來執行Late Resume.

Late Resume會依次喚醒前面調用了EarlySuspend的設備.

3)WakeLock

Wake Lock在Android的電源管理系統中扮演一個核心的角色.WakeLock是一種鎖的機制,只要有人拿著這個鎖,系統就無法進入休眠,可以被用戶態程序和內核獲得。這個鎖可以是有超時的或者是沒有超時的,超時的鎖會在時間過去以後自動解鎖。如果沒有鎖了或者超時了,內核就會啟動休眠的那套機制來進入休眠。

4)AndroidSuspend

當用戶寫入mem或者standby到/sys/power/state中的時候,state_store()會被調用,然後Android會在這裡調用request_suspend_state()而標准的Linux會在這裡進入enter_state()這個函數.如果請求的是休眠,那麼early_suspend這個workqueue就會被調用,並且進入early_suspend狀態。調用request_suspend_state()後在suspend_work_queue工作線程上面注冊一個early_suspend_work工作者,

然後又通過staticDECLARE_WORK(early_suspend_work,early_suspend);注冊一個工作任務early_suspend。所以系統最終會調用early_suspend函數。

5)注冊加入suspend和resume流程

platform_device_register()-->platform_device_add()-->device_add()-->device_pm_add()-->,最終加入到了dpm_list的鏈表中,在其中的dpm_suspend和dpm_suspend中通過遍歷這個鏈表來進行查看哪個device中包含suspend和resume項。

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

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


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