嵌入式Linux系統(tǒng)(八)——嵌入式Linux的低功耗策略

姓名:高靜? ? ? ? ? ? 學(xué)號:19020100031? ? ?學(xué)院:電子工程學(xué)院

轉(zhuǎn)自:https://blog.csdn.net/toove/article/details/94582244

【嵌牛導(dǎo)讀】嵌入式Linux的低功耗策略

【嵌牛鼻子】嵌入式? Linux系統(tǒng)

【嵌牛提問】嵌入式Linux系統(tǒng)有哪些低功耗策略

【嵌牛正文】

引 言

由于Linux系統(tǒng)具備嵌入式操作系統(tǒng)需要的很多特色唯袄,如適應(yīng)于多種CPU和多種硬件平臺、性能穩(wěn)定、可裁剪性很好皮假、源碼開放攒射、研發(fā)和使用簡單等。現(xiàn)在专控,基于Linux應(yīng)用的嵌入式設(shè)備日益增多中捆,Linux正在嵌入式領(lǐng)域發(fā)揮著越來越重要的作用。

對于嵌入式設(shè)備尤其是移動設(shè)備來說雾消,功耗是系統(tǒng)的重要指標(biāo)灾搏,系統(tǒng)設(shè)計的重要目標(biāo)之一就是要盡可能地降低功耗。現(xiàn)在立润,對功耗的研究主要集中在硬件解決方案上确镊,而軟件研究方面很少。實踐證實:在硬件設(shè)計和選型確定后范删,功耗的高低和軟件設(shè)計有很大的關(guān)聯(lián)性蕾域。軟件設(shè)計和編程質(zhì)量的好壞,極大地影響著最終產(chǎn)品的功耗水平到旦。據(jù)此旨巷,為降低功耗,提出在嵌入式Linux下軟件編程的幾種策略添忘。

1 問題分析

因為最終耗能的是硬件采呐,所以在考慮采用軟件方法降低功耗的時候,要充分考慮硬件的功能和性能搁骑,即在保障系統(tǒng)實現(xiàn)的基礎(chǔ)上怎樣組織硬件運作而使功耗降低斧吐。全速執(zhí)行、待機(jī)和睡眠等行為都是利用CPU的固有能力仲器,透過降低工作電壓或頻率來節(jié)省功耗煤率。此外,在大多數(shù)用戶察覺不到的情況下乏冀,實際的電源管理能夠根據(jù)負(fù)載狀況逐漸改變系統(tǒng)的狀態(tài)蝶糯,有時這種情況在l s之內(nèi)能夠產(chǎn)生數(shù)百次。

另外辆沦,在編寫程式時可能會碰到這樣的情況昼捍,如記錄狀態(tài)寄存器內(nèi)容识虚,并等待設(shè)定標(biāo)記出現(xiàn);檢查串口的FIFO狀態(tài)標(biāo)記妒茬,看是否收到數(shù)據(jù)担锤;監(jiān)測一個雙端口存儲器,以確定系統(tǒng)中是否有另外CPU寫入了一個變量乍钻,以便控制共享資源肛循。從表面上看,這樣的代碼沒有什么問題团赁,但在每個時鐘周期里不斷記錄寄存器狀態(tài)將無法有效延長設(shè)備的電池壽命。

基于這些問題谨履,下面提出幾種策略欢摄,以有效降低最終產(chǎn)品的功耗水平。

2 利用Linux內(nèi)核的電源管理

電源管理策略的基礎(chǔ)是調(diào)整處理器內(nèi)核的工作電壓和頻率笋粟。但是怀挠,現(xiàn)代的嵌入式CPU具備很高的電源效率,以至于CPU并不總是最主要的耗能組件害捕。其他高耗能的組件包括高性能內(nèi)存绿淋、顯示屏和射頻接口等,因此尝盼,假如電源管理系統(tǒng)只能調(diào)節(jié)CPU內(nèi)核的電壓和頻率吞滞,那么他的用途將有限。一個真正有效的電源管理方案應(yīng)該能夠采用和CPU內(nèi)核執(zhí)行相協(xié)調(diào)或相單獨的方式盾沫,支持對一系列電壓和頻率的快速調(diào)節(jié)裁赠。

Linux支持兩種電源管理標(biāo)準(zhǔn):APM(AdvancedPower Managememt)和ACPI(Advanced Configtlrationand P0wer Interface)。APM是傳統(tǒng)的高級電源管理方案赴精,現(xiàn)在仍然使用在許多基于Linus便攜式設(shè)備中佩捞;而ACPI則提供了更為靈活的電腦和設(shè)備管理接口。這兩個標(biāo)準(zhǔn)不能同時運行蕾哟。缺省情況下一忱,Linux運行ACPI。APM能夠使機(jī)器處于Suspend(懸掛)或Standby(待機(jī))狀態(tài)谭确,連同檢查電池容量帘营;而ACPI還能夠使外設(shè)(如顯示器、PCI)單獨斷電逐哈,在節(jié)省電能方面有更多的控制仪吧。為了讓電源管理功能生效,需要在Linux內(nèi)核打開他鞠眉,并且在Linux里加載必需的應(yīng)用軟件薯鼠。

電源管理活動需要對操作系統(tǒng)內(nèi)核和設(shè)備驅(qū)動程式進(jìn)行特別的干預(yù)择诈。在嵌入式Linux中,雖然低層電源管理駐留在操作系統(tǒng)內(nèi)核中出皇,但電源管理策略和機(jī)制來源于中介軟件和用戶應(yīng)用程式代碼羞芍,如圖l所示。

Linux內(nèi)核中電源管理機(jī)制負(fù)責(zé)維持整個系統(tǒng)的電源狀態(tài)郊艘。他能夠看成是為驅(qū)動程式荷科、中介軟件和應(yīng)用程式提供服務(wù)的元素。

通過在驅(qū)動程式中實現(xiàn)電源管理接口纱注,能夠讓驅(qū)動程式密切監(jiān)控系統(tǒng)狀態(tài)畏浆。他們在外部事件的驅(qū)動下,透過設(shè)定不同的狀態(tài)反映設(shè)備的工作情況狞贱。為了實現(xiàn)設(shè)備電源管理接口刻获,需要實現(xiàn)以下操作:

①使用pm_register對設(shè)備的每個實例(instance)進(jìn)行注冊;

②在對硬件進(jìn)行操作之前調(diào)用pm_access(這樣可確保設(shè)備已被喚醒瞎嬉,并處于ready狀態(tài))蝎毡;

③用戶自己的pnl_callback函數(shù)在系統(tǒng)進(jìn)入suspend狀態(tài),或從suspend狀態(tài)恢復(fù)的時候會被調(diào)用氧枣;

④當(dāng)設(shè)備不使用時調(diào)用pm_dev_idle函數(shù)(這個操作是可選的沐兵,以增強(qiáng)設(shè)備idle狀態(tài)的監(jiān)測能力);

⑤當(dāng)被unIoad的時候便监,使用pm_unreggister取消設(shè)備的注冊扎谎。

中介程式允許用戶預(yù)先定義某些策略,然后跟蹤電源狀態(tài)烧董,執(zhí)行特定的操作簿透。

在應(yīng)用程式中,利用中介程式提供的API解藻,設(shè)立其基本的約束條件老充,強(qiáng)迫電源管理機(jī)制產(chǎn)生和其執(zhí)行需求相匹配的變化。Linix電源管理的實現(xiàn)機(jī)制包括以下API螟左,例如dpm_set_os()(內(nèi)核)啡浊、assert_constraint()、remove_constraint()和set_operatInK—state()(內(nèi)核和驅(qū)動程式)胶背、set_policy()和set_task_state()(經(jīng)系統(tǒng)的用戶級調(diào)用)連同/proc接口巷嚣。

3 在空閑模式下等待事件

很多嵌入式CPU都具備能降低功耗的電源工作模式,最常用的是空閑模式钳吟。此時CPU內(nèi)核指令執(zhí)行部分關(guān)閉廷粒,而任何外設(shè)和中斷信號仍處于工作狀態(tài)。由于空閑模式比CPU執(zhí)行指令時的功耗要小得多,因而能夠在任何時候坝茎,只要Linux檢查到任何線程都處于阻塞狀態(tài)(如等待中斷涤姊、事件或定時時間),他都能夠?qū)PU置于空閑模式嗤放。任何中斷(如觸摸屏事件思喊、按下按鍵事件等)都能把CPU從空閑模式中喚醒,然后繼續(xù)執(zhí)行后面的代碼次酌。假如事件不能直接連接到外部中斷恨课,也能夠用一個系統(tǒng)定時器定期喚醒CPU。例如在等待一個事件并且知道只要事件發(fā)生后在10 ms內(nèi)能檢測到岳服,那么能夠啟動lO ms定時器剂公,并把CPU置于空閑模式。每次處理定時中斷時都要檢查事件狀態(tài)吊宋,假如狀態(tài)沒有變化纲辽,就立即回到空閑模式。

4 減少事件

通常CPU的定時中斷間隔為1 ms贫母,Linux會頻繁使CPU置于空閑模式文兑,并一直維持到被中斷喚醒盒刚。在這種情況下腺劣,最有可能喚醒CPU中斷的是定時器中斷本身。即使任何其他線程被阻塞因块,在其他中斷橘原、內(nèi)部事件及長時間延遲之前,定時器中斷也會以每秒l 00()次的頻率把CPU從空閑模式中喚醒涡上,以運行調(diào)度程式趾断。就算調(diào)度程式確定任何線路都被阻塞,并很快將CPU回復(fù)到空閑模式吩愧,這樣頻繁操作也會浪費大量電源芋酌。因此,應(yīng)盡可能長時間地將CPU置于空閑模式雁佳,而減少事件是解決這個問題的有效途徑脐帝。通過分析代碼和系統(tǒng)需要,以決定是否能改變處理中斷的方式實現(xiàn)糖权。例如堵腹,能夠在進(jìn)入空閑模式前關(guān)閉時隙中斷信號,只有再次出現(xiàn)中斷信號時才被喚醒星澳。但是疚顷,這種做法通常不太合適。盡管多數(shù)阻塞的線程能夠直接或間接等待外部中斷,有些還依賴于定時中斷腿堤,如一個驅(qū)動器會在等待外設(shè)時睡眠500 ms阀坏,這時空閑模式下假如完全關(guān)閉系統(tǒng)定時器,可能意味著線路不能按時恢復(fù)工作释液。

Linux最好能為調(diào)度程式進(jìn)行可變超時設(shè)定全释。Lintux知道每個線程無法確定等待的是外部還是內(nèi)部事件,或計劃在某特定時間再次運行误债。Linux可算出第一個線程預(yù)定何時運行浸船,并相應(yīng)地在CPU置于空閑模式之前設(shè)定定時器工作∏薜福可變超時設(shè)定不會對調(diào)度程式造成很大的負(fù)擔(dān)李命,但卻能節(jié)省電源和處理時間。

可變計劃超時限定只是減少事件的一種方法箫老,存儲器直接存取(DMA)也可讓CPU長時間處于空閑模式封字,即使數(shù)據(jù)正在發(fā)送至外設(shè)或從外設(shè)收取。所以只要可能耍鬓,都應(yīng)在外圍驅(qū)動器中使用DMA阔籽,省電效果相當(dāng)令人滿意。

例如英特爾公司StrongARM CPU串口接收FIF0時牲蜀,大約每收到8個字節(jié)發(fā)生1次中斷笆制,在115 2OO bps.速度下,發(fā)送到這個端口的11 KB脈沖數(shù)據(jù)會引起CPU內(nèi)核每秒中斷l(xiāng) 500次涣达,很可能使其從空閑模式中喚醒在辆;但假如實際上無需在這些小的8字節(jié)設(shè)備中處理數(shù)據(jù),浪費是很驚人的度苔。DMA最好和大容量緩沖器一起使用匆篓,以使中斷發(fā)生的水平更加容易管理,或許是每秒10次或l00次寇窑,讓CPU在兩次中斷之間空閑鸦概。事實證實,在這些場合應(yīng)用DMA能減少使用率達(dá)20%甩骏,可降低CPU功耗窗市,并提高供其他線程使用的CPU帶寬。


5 控制CPU的性能

CPU在降低功耗方面的最新進(jìn)展表明横漏,CPU消耗的能量和驅(qū)動CPU的時鐘頻率連同應(yīng)用其內(nèi)核上的電壓平方成正比谨设。

CPU允許動態(tài)降低時鐘速度。降低一半時鐘速度缎浇,功耗將成比例下降扎拣。但是僅采用這種技術(shù)實現(xiàn)節(jié)能,還需要一些技巧.因為執(zhí)行的代碼可能要兩倍長的時間才能完成,即使這樣也不會省電二蓝。例如誉券,板上LCD控制器需要使用一個儲存在片外SDRAM中的幀緩存。當(dāng)LCD控制器工作時刊愚,需要指定足夠高的內(nèi)存總線頻率來滿足顯示器刷新速率的需要踊跟。在LCD不工作的情況下(例如當(dāng)PDA僅作為MP3播放器使用時),降低SDRAM總線頻率鸥诽,能夠節(jié)省整個系統(tǒng)的功耗商玫。

動態(tài)降低電壓是另一種做法。越來越多的CPU允許降低電壓牡借,以適應(yīng)CPU時鐘速度的下降拳昌,這樣在降低時鐘速度時也能省電。事實上钠龙,只要CPU不飽和炬藤,頻率和電壓就能不斷減少,這樣還是能完成工作碴里,而消耗的電源總體上卻比較低沈矿。

考慮到并不是任何線程都消耗同樣多CPU帶寬,所以即使這些方法也還是能夠改進(jìn)的咬腋。有效應(yīng)用CPU帶寬的線程羹膳,會隨著CPU時鐘速度下降而花更長的時間才能完成,這些線程使用分配給他們的每一個周期帝火。另一方面溜徙,I/O線程采用分配給他的任何CPU周期湃缎,即便CPU時鐘速率下降犀填,也要用同樣長的時間才能完成。例如嗓违,像很多PDA使用的PCMCIA卡接口九巡,當(dāng)數(shù)據(jù)寫人快閃存儲卡時,系統(tǒng)瓶頸不是CPU的速度蹂季,而是物理總線接口連同卡的固件為擦掉和重新編程閃存所花的時間冕广。理想情況下,前面討論的等待事件的技術(shù)可在這里應(yīng)用偿洁,以最大程度降低功耗撒汉,但是等待時間經(jīng)常變化很大,遠(yuǎn)小于操作系統(tǒng)運行時間涕滋,這樣會影響到性能睬辐。這些驅(qū)動程式常常檢測狀態(tài)寄存器,此時降低時鐘速度將節(jié)省一部分電源,但會對數(shù)據(jù)寫入卡的時間產(chǎn)生輕微影響溯饵。

使用控制CPU性能的策略侵俗,要知道何時能降低時鐘頻率和電壓而不會顯著影響性能;考慮什么時候降低驅(qū)動器和應(yīng)用程式的時鐘速度比較難處理丰刊。這在多任務(wù)處理環(huán)境中更加富有技巧性隘谣。

6 結(jié) 論

近年來隨著電腦和網(wǎng)絡(luò)通信、消費電子合一的加速發(fā)展啄巧,嵌入式產(chǎn)品成為信息產(chǎn)業(yè)的主流寻歧。Linux在短短的十幾年時間已發(fā)展成為功能強(qiáng)大設(shè)計完善的操作系統(tǒng)之一,可運行在X86秩仆、Alpha熄求、Sparc、MIPS逗概、PPC弟晚、Motorola、NEC逾苫、ARM等多種硬件平臺上卿城,而且開放源代碼,并能夠定制铅搓,越來越多的企業(yè)和研發(fā)機(jī)構(gòu)都轉(zhuǎn)向嵌入式Linux的研發(fā)和研究上瑟押。本文在系統(tǒng)分析的基礎(chǔ)上,研究了在嵌入式Linux系統(tǒng)中通過優(yōu)化軟件編寫機(jī)制來降低最終產(chǎn)品功耗水平的方法星掰,具備很強(qiáng)的實際應(yīng)用意義多望。隨著研究的深入,嵌入式Linux必將顯示出其在低功耗方面的優(yōu)越性氢烘,將有更多的嵌入式設(shè)備普及Linux應(yīng)用怀偷。

原文鏈接:https://blog.csdn.net/toove/article/details/94582244

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市播玖,隨后出現(xiàn)的幾起案子椎工,更是在濱河造成了極大的恐慌,老刑警劉巖蜀踏,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件维蒙,死亡現(xiàn)場離奇詭異,居然都是意外死亡果覆,警方通過查閱死者的電腦和手機(jī)颅痊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來局待,“玉大人斑响,你說我怎么就攤上這事吗讶。” “怎么了恋捆?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵照皆,是天一觀的道長。 經(jīng)常有香客問我沸停,道長膜毁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任愤钾,我火速辦了婚禮瘟滨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘能颁。我一直安慰自己杂瘸,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布伙菊。 她就那樣靜靜地躺著败玉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪镜硕。 梳的紋絲不亂的頭發(fā)上运翼,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天,我揣著相機(jī)與錄音兴枯,去河邊找鬼血淌。 笑死,一個胖子當(dāng)著我的面吹牛财剖,可吹牛的內(nèi)容都是我干的悠夯。 我是一名探鬼主播,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼躺坟,長吁一口氣:“原來是場噩夢啊……” “哼沦补!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起瞳氓,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤策彤,失蹤者是張志新(化名)和其女友劉穎栓袖,沒想到半個月后匣摘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡裹刮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年音榜,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片捧弃。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡赠叼,死狀恐怖擦囊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情嘴办,我是刑警寧澤瞬场,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站涧郊,受9級特大地震影響贯被,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜妆艘,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一彤灶、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧批旺,春花似錦幌陕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至暇赤,卻和暖如春搬卒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背翎卓。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工契邀, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人失暴。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓坯门,卻偏偏與公主長得像放可,于是被迫代替她去往敵國和親捎谨。 傳聞我的和親對象是個殘疾皇子帅韧,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內(nèi)容