基于linux內(nèi)核驅(qū)動的Android電源管理淺談-_第1頁
基于linux內(nèi)核驅(qū)動的Android電源管理淺談-_第2頁
基于linux內(nèi)核驅(qū)動的Android電源管理淺談-_第3頁
基于linux內(nèi)核驅(qū)動的Android電源管理淺談-_第4頁
基于linux內(nèi)核驅(qū)動的Android電源管理淺談-_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、如何有效地管理嵌入式系統(tǒng),尤其是移動終端的電源功耗,通過降低設(shè)備電壓、頻率,可以減少能量的消耗,達到省電的目的,電源管理歷來為重要的研究課題之一。動態(tài)電源管理DPM(Dynamic Power Management技術(shù)提供一種操作系統(tǒng)級別的電源管理能力,包含CPU工作頻率和電壓,外部總線時鐘頻率,外部設(shè)備時鐘、電源等方面的動態(tài)調(diào)節(jié)、管理功能。通過用戶層制定策略與內(nèi)核提供管理功能交互,實時調(diào)整電源參數(shù)而同時滿足系統(tǒng)實時應(yīng)用的需求,允許電源管理參數(shù)在短時間的空閑或任務(wù)運行在低電源需求時,可以被頻繁地、低延遲地調(diào)整,從而實現(xiàn)更精細、更智能的電源管理。電源管理實際上是一個系統(tǒng)工程,從應(yīng)用程序到內(nèi)核框架

2、,再到設(shè)備驅(qū)動和硬件設(shè)備,都要參與進來,才能達到電源管理的最優(yōu)化。硬件層:硬件設(shè)備CMOS電路的總功耗是活動功耗與靜態(tài)功耗之和。當(dāng)電路工作或邏輯狀態(tài)轉(zhuǎn)換時會產(chǎn)生活動功耗C L*V2dd*f,未發(fā)生轉(zhuǎn)換時晶體管漏電流會造成靜態(tài)功耗V dd*I q。其消耗功率如下: P=r*C L*V2dd*f+V dd*I q其中r為開關(guān)活動率(Switching Activity,C L為負(fù)載電容,V dd為電源電壓,f為工作頻率,I q 為漏電流。在操作系統(tǒng)級的電源管理設(shè)計實現(xiàn)中,重點是活動功耗。我們從中可以得出幾種管理活動功耗的方法:1.電壓、時鐘調(diào)節(jié)。通過降低電壓和時鐘來減少活動功耗和靜態(tài)功耗。2.時鐘

3、選通。停止電路時鐘,即設(shè)f為0,將時鐘從不用的電路模塊斷開,減少活動功耗。許多CPU都有“閑置”或“停止”指令,一些處理器還可通過門控關(guān)閉非CPU時鐘模塊,如高速緩存、DMA外設(shè)等。3.電源供應(yīng)選通。斷開電路中不使用的模塊電源供應(yīng)。這種方法需要考慮重新恢復(fù)該模塊的代價。斷開不使用的模塊的時鐘和電源供應(yīng)可以減少電源消耗,但要能夠正確預(yù)測硬件模塊的空閑時期。因為重新使能硬件模塊時鐘和電源會造成一定延遲,不正確的預(yù)測將導(dǎo)致性能下降。從上分析可以知道降低電壓對功耗的貢獻是2次方的;降低時鐘也可降低功耗,但它同時也降低性能,延長同一任務(wù)的執(zhí)行時間。所以,選擇滿足性能所需的最低時鐘頻率,在時鐘頻率和各種系

4、統(tǒng)部件運行電壓要求范圍內(nèi),設(shè)定最低的電源電壓,將會大量減少系統(tǒng)功耗。通過調(diào)節(jié)電壓、頻率來減少系統(tǒng)活動功耗的動態(tài)電源管理需要硬件支持。SoC系統(tǒng)一般有多個執(zhí)行單元,如PM(電源管理模塊、OSC(片上晶振模塊、PLL(鎖相環(huán)模塊、CPU核以及CPU核中的數(shù)據(jù)緩存和指令緩存,其他模塊統(tǒng)稱為外圍模塊(例如LCD控制器、UART、SDRAM控制器等。CPU 高頻時鐘主要由PLL提供,同時PLL也為外圍模塊和SoC總線提供其他頻率時鐘。一般SoC系統(tǒng)都有一些分頻器和乘法器可以控制這些時鐘。PM模塊主要是管理系統(tǒng)的電源供應(yīng)狀態(tài)。一般有自己的低頻、高準(zhǔn)確度晶振,用以維持一個RTC時鐘、RTC定時器和中斷控制單

5、元。其中中斷控制單元使RTC定時器和外部設(shè)備能夠喚醒掛起的SoC系統(tǒng),數(shù)字相控鎖環(huán)(DPLL將外頻或晶振輸入轉(zhuǎn)化為高頻,供給CPU核以及其他片上設(shè)備。操作DPLL控制寄存器就可以設(shè)置DPLL輸出時鐘,控制MPU和DSP、MMU單元的運行頻率,MPU、DSP外設(shè)時鐘,以及LCD刷新時鐘。內(nèi)核層:Linux架構(gòu)下實現(xiàn)電源管理內(nèi)核模塊需要實現(xiàn)一個應(yīng)用層和操作系統(tǒng)的接口,一個為多個硬件平臺提供通用電源管理邏輯控制框架的硬件無關(guān)層,以及一個管理特定硬件電源控制接口的平臺相關(guān)電源控制層。其代碼路徑文件在:/kernel/power/main.c/kernel/power/earlysuspend.c/ke

6、rnel/power/wakelock.c/kernel/power/ fbearlysuspend.c/kernel/power/ consoleearlysuspend.crequest_suspend_state(函數(shù)是android 相對標(biāo)準(zhǔn)linux內(nèi)核改動的地方,它實現(xiàn)在earlysuspend.c中。在標(biāo)準(zhǔn)linux內(nèi)核中,用戶通過sys寫入“mem”和“standby”時,會直接調(diào)用enter_state(進入suspend模式,但在android中則會調(diào)用request_suspend_state(函數(shù)進入early suspend狀態(tài)。該機制作用在關(guān)閉顯示的時候,一些和顯示

7、有關(guān)的設(shè)備,比如LCD背光,重力感應(yīng)器,觸摸屏,這些設(shè)備都應(yīng)該關(guān)掉, 但是系統(tǒng)可能還是在運行狀態(tài)(這時候還有wake lock進行任務(wù)的處理,例如在掃描SD卡上的文件,后臺音樂/FM播放,文件傳輸/下載等。在嵌入式設(shè)備中, 背光是一個很大的電源消耗,所以android加入這樣一種機制。接著分析內(nèi)核代碼具體實現(xiàn)流程,對于需要注冊結(jié)構(gòu)early_suspend的handler通過函數(shù)register_early_suspend注冊,注冊時將具體的結(jié)構(gòu)early_suspend掛載在early_suspend_handlers鏈表上。何時調(diào)用掛載在該鏈表上的handler呢?具體何時調(diào)用由內(nèi)核調(diào)用機

8、制決定,其內(nèi)核調(diào)用流程如式中的函數(shù)request_suspend_state所示,該函數(shù)會通過工作隊列的推后執(zhí)行機制調(diào)用,其中work結(jié)構(gòu)early_suspend_work或late_resume_work掛載在工作隊列suspend_work_queue上,推后執(zhí)行的具體函數(shù)就是early_suspend或late_resume了。在這2個函數(shù)中,就是從鏈表early_suspend_handlers上取下先前在函數(shù)register_early_suspend 中注冊的結(jié)構(gòu)early_suspend的handler。注意其順序,early_suspend中是從鏈表頭開始取,與其相反的lat

9、e_resume是從鏈表尾開始一個個的取,這個好理解。其中的工作隊列suspend_work_queue 是在wakelock.c中創(chuàng)建的。md_init(->md_probe(->md_alloc(->md_fops->md_ioctl(->add_new_disk(-> md_import_device(->rdev_ktype->rdev_default_attrs->rdev_state->state_store(->request_suspend_state(->early_suspend(、late_resum

10、e(->early_suspend_handlers <-register_early_suspend(那么內(nèi)核里面為什么要通過register_early_suspend這種復(fù)雜機制來進行動態(tài)電源的管理,而不是在驅(qū)動中對設(shè)備直接設(shè)置相應(yīng)的狀態(tài)?比如在開始要用時就打開設(shè)備,用完了就關(guān)掉設(shè)備。這是因為電源管理的實時性畢竟不需要那么的高,不像觸摸屏采樣數(shù)據(jù)那樣,點擊下去就立即得有采樣數(shù)據(jù)出來。工作隊列就是用來延遲時間不敏感的任務(wù),以便更迅速處理那些高頻率諸如中斷事件,這樣能夠帶來性能的優(yōu)化。其由內(nèi)核工作線程events/X (每CPU 一個,X=1,2,3,4來管理,內(nèi)核線程就從工作隊

11、列(這里即是suspend_work_queue中抽取任務(wù)并激活一個bottom-half 處理程序,這里就是上面的那個early_suspend(或late_resume(函數(shù)。驅(qū)動層:在驅(qū)動中對early suspend要做的就相對較簡單,固定模式,僅僅是調(diào)用上面討論的接口函數(shù)register_early_suspend去掛載自己的handler到鏈表early_suspend_handlers上,然后主要任務(wù)就是根據(jù)電源管理芯片的SPEC去實自己的handler結(jié)構(gòu)的suspend、resume成員函數(shù),以便在函數(shù)early_suspend和late_resume中回調(diào)回來有具體函數(shù)可以

12、調(diào)用。驅(qū)動中的fbearlysuspend.c 和consoleearlysuspend.c 這兩個文件實現(xiàn)了針對lcd framebuffer 的earlysuspend 和console 的earlysuspend 支持。實際上這兩個文件就是利用上面earlysuspend.c提供的接口注冊了針對framebuffer 和console的early suspend handler,并提供相應(yīng)的handler函數(shù)。另外在MTK的驅(qū)動中諸如重力傳感器、光感、距離傳感器、鍵盤、觸摸屏、LCD以及GPIO事件等等都用到了這種early suspend的機制。Framework層:PowerMana

13、ger.java提供給應(yīng)用層調(diào)用,最終核心在PowerManagerService.java,其提供PowerManager的功能,以及整個電源管理狀態(tài)機的運行。WindowManagerService會把用戶的操作作為user Activity事件來調(diào)用userActivity函數(shù),PowerManagerService就會在user Activity 里面判斷事件類型作出相應(yīng)的反應(yīng)。核心PowerManagerService.java,Power.java提供底層的函數(shù)接口,與JNI層進行交互,JNI層的代碼主要在文件android_os_Power.cpp中,與Linux kernel交

14、互是通過Power.c來實現(xiàn)的, Android跟kernel的交互主要是通過sys文件的方式來實現(xiàn)的。當(dāng)用戶通過sysfs寫入mem 或者standby到/sys/power/state中的時候, state_store(會被調(diào)用,然后Android會在這里調(diào)用request_suspend_state( 而標(biāo)準(zhǔn)的Linux會在這里進入enter_state(這個函數(shù)。如果請求的是休眠, 那么early_suspend這個workqueuequeue_work(就會被調(diào)用,并且進入early_suspend狀態(tài)。APP層:上層應(yīng)用暫時沒分析,簡要列出找到的相關(guān)的資料。Android 中定義了幾種低功耗狀態(tài):earlysuspend,suspend,hibernation。1,earlysuspend是一種低功耗的狀態(tài),某些設(shè)備可以選擇進入某種功耗較低的狀態(tài),比如LCD可以降低亮度或滅掉;2,suspend是指除電源管理以外的其他外

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論