基於Android的Linux核心的電源管理 概述

2021-09-24 23:50:08 字數 1745 閱讀 1681

1.  電源管理的狀態

android的linux核心為系統提供了4種電源狀態,核心的源**為其中的3種定義了名字和對應的巨集定義,名字定義在kernel/power/suspend.c中:

const char *const pm_states[pm_suspend_max] = ;

對應的巨集定義在:include/linux/suspend.h中:

typedef int __bitwise suspend_state_t;

#define pm_suspend_on        ((__force suspend_state_t) 0)

#define pm_suspend_standby    ((__force suspend_state_t) 1)

#define pm_suspend_mem        ((__force suspend_state_t) 3)

#define pm_suspend_max        ((__force suspend_state_t) 4)

很奇怪的是,第四種狀態(disk)沒有具體的定義,而是硬編碼在**中,不明白為什麼會這樣做,至少我現在看的版本是這樣(2.6.35),這種就是所謂的suspend to disk或者叫hibernate。不過這不是重點,再說,目前也很少有android的裝置支援hibernate。

顧名思義:

pm_suspend_on -- 裝置處於全電源狀態,也就是正常工作狀態;

pm_suspend_standby -- 裝置處於省電狀態,但還可以接收某些事件,具體的行為取決與具體的裝置;

pm_suspend_mem -- suspend to memory,裝置進入睡眠狀態,但所有的資料還儲存在記憶體中,只有某些外部中斷才可以喚醒裝置;

目前,大多數的android裝置都只支援其中的兩種:pm_suspend_on 和 pm_suspend_mem,所以下面的討論說道suspend的地方,均是指pm_suspend_mem。

圖2.1 電源狀態的轉換

3.  android的電源鎖機制:wake lock

android相比標準的linux核心,在電源管理中加入了wake lock機制。一旦申請了某種型別的鎖,電源管理模組將會「鎖住」某一種電源狀態,目前,android提供了兩種型別的鎖:

wake_lock_suspend  --  阻止系統進入suspend狀態;

wake_lock_idle  --  阻止系統進入idle狀態;

wake lock也可以設定超時,時間一到,自動釋放該鎖。

有關wake lock的**在:kernel/power/wakelock.c中。

4.  電源狀態遷移 

核心啟動完成以後,電源管理系統會在sysfs檔案系統中建立3個檔案:

/sys/power/state

/sys/power/wake_lock

/sys/power/wake_unlock

電源狀態的遷移首先由使用者空間的應用程式發起,當系統應用檢測到一定時間內沒有使用者活動後(例如觸控螢幕、按鍵),可以向/sys/power/state檔案寫入相應的電源狀態名稱(請參考第一節內容),如果寫入「mem」,將會觸發核心啟動suspend的流程,核心將會按照圖2.1進行狀態的遷移。應用程式也可以通過/sys/power/wake_lock申請乙個wake_lock_suspend 型別的鎖,相應地,通過/sys/power/wake_unlock則可以釋放乙個鎖。核心在進入suspend之前如果檢測到某個鎖沒有釋放,則會放棄本次的suspend過程,直到這個鎖釋放為止。

基於Android的SDIO WIFI移植(1)

一 sdio 裝置驅動移植 很不巧核心已經 被 支援了,我就先不費這事了。二 配置核心以支援marvel無線wifi 在這裡我編譯成模組的方式 device drivers network device support wireless lan marvell 8 libertas wlan dri...

Android 基於Message的程序間通訊

例項在最後,先簡析原理。1 服務端重要 解析 nullable override public ibinder onbind intent intent getbinder裡面是這樣的 public ibinder getbinder mtarget是什麼?怎麼來的?public messenger...

基於EasyPR的車牌識別android實現

easypr4android,基於easypr1.5beta的android實現 更新 新增編譯好的安裝檔案 採用android studio2.3.3大幅簡化ndk開發的配置 特性 1.支援拍照和支援相簿瀏覽識別 2.ndk呼叫opencv 3.從assets讀取並複製檔案 4.採用多執行緒進行識...