<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 嵌入式Linux的低功耗策略研究

嵌入式Linux的低功耗策略研究

作者: 時(shí)間:2006-10-13 來(lái)源:網(wǎng)絡(luò ) 收藏

摘 要設備的一個(gè)十分重要的性能指標。在硬件設計和選型之后,水平在極大程度上取決于軟件的設計。鑒于Lioux在設備中的應用日益廣泛,提出在下軟件編寫(xiě)的幾種。通過(guò)這些軟件編寫(xiě)方式,能有效降低最終產(chǎn)品的水平。
關(guān)鍵詞:嵌入式功耗

引 言
由于系統具有嵌入式操作系統需要的很多特色,如適應于多種CPU和多種硬件平臺、性能穩定、可裁剪性很好、源碼開(kāi)放、開(kāi)發(fā)和使用簡(jiǎn)單等。目前,基于Linux應用的嵌入式設備日益增多,Linux正在嵌入式領(lǐng)域發(fā)揮著(zhù)越來(lái)越重要的作用。

對于嵌入式設備尤其是移動(dòng)設備來(lái)說(shuō),功耗是系統的重要指標,系統設計的重要目標之一就是要盡可能地降低功耗。目前,對功耗的主要集中在硬件解決方案上,而軟件方面很少。實(shí)踐證明:在硬件設計和選型確定后,功耗的高低與軟件設計有很大的關(guān)聯(lián)性。軟件設計和編程質(zhì)量的好壞,極大地影響著(zhù)最終產(chǎn)品的功耗水平。據此,為降低功耗,提出在嵌入式Linux下軟件編程的幾種。

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

另外,在編寫(xiě)程序時(shí)可能會(huì )遇到這樣的情況,如記錄狀態(tài)寄存器內容,并等待設定標記出現;檢查串口的FIFO狀態(tài)標記,看是否收到數據;監測一個(gè)雙端口存儲器,以確定系統中是否有另外CPU寫(xiě)入了一個(gè)變量,以便控制共享資源。從表面上看,這樣的代碼沒(méi)有什么問(wèn)題,但在每個(gè)時(shí)鐘周期里不斷記錄寄存器狀態(tài)將無(wú)法有效延長(cháng)設備的電池壽命。

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

2 利用Linux內核的電源管理
電源管理策略的基礎是調整處理器內核的工作電壓和頻率。不過(guò),現代的嵌入式CPU具有非常高的電源效率,以至于CPU并不總是最主要的耗能組件。其他高耗能的組件包括高性能內存、顯示屏和射頻接口等,因此,如果電源管理系統只能調節CPU內核的電壓和頻率,那么它的用途將有限。一個(gè)真正有效的電源管理方案應該可以采用與CPU內核執行相協(xié)調或相獨立的方式,支持對一系列電壓和頻率的快速調節。

Linux支持兩種電源管理標準:APM(AdvancedPower Managememt)和ACPI(Advanced Configtlrationand P0wer Interface)。APM是傳統的高級電源管理方案,目前仍然使用在許多基于Linus便攜式設備中;而ACPI則提供了更為靈活的電腦和設備管理接口。這兩個(gè)標準不能同時(shí)運行。缺省情況下,Linux運行ACPI。APM可以使機器處于Suspend(懸掛)或Standby(待機)狀態(tài),以及檢查電池容量;而ACPI還可以使外設(如顯示器、PCI)單獨斷電,在節省電能方面有更多的控制。為了讓電源管理功能生效,需要在Linux內核打開(kāi)它,并且在Linux里加載必需的應用軟件。

電源管理活動(dòng)需要對操作系統內核和設備驅動(dòng)程序進(jìn)行特殊的干預。在嵌入式Linux中,雖然低層電源管理駐留在操作系統內核中,但電源管理策略和機制來(lái)源于中介軟件和用戶(hù)應用程序代碼,如圖l所示。


Linux內核中電源管理機制負責維持整個(gè)系統的電源狀態(tài)。它可以看成是為驅動(dòng)程序、中介軟件和應用程序提供服務(wù)的元素。

通過(guò)在驅動(dòng)程序中實(shí)現電源管理接口,可以讓驅動(dòng)程序密切監控系統狀態(tài)。它們在外部事件的驅動(dòng)下,透過(guò)設定不同的狀態(tài)反映設備的工作情況。為了實(shí)現設備電源管理接口,需要實(shí)現以下操作:
①使用pm_register對設備的每個(gè)實(shí)例(instance)進(jìn)行注冊;
②在對硬件進(jìn)行操作之前調用pm_access(這樣可保證設備已被喚醒,并處于ready狀態(tài));
③用戶(hù)自己的pnl_callback函數在系統進(jìn)入suspend狀態(tài),或者從suspend狀態(tài)恢復的時(shí)候會(huì )被調用;
④當設備不使用時(shí)調用pm_dev_idle函數(這個(gè)操作是可選的,以增強設備idle狀態(tài)的監測能力);
⑤當被unIoad的時(shí)候,使用pm_unreggister取消設備的注冊。

中介程序允許用戶(hù)預先定義某些策略,然后跟蹤電源狀態(tài),執行特定的操作。

在應用程序中,利用中介程序提供的API,設立其基本的約束條件,強迫電源管理機制產(chǎn)生與其執行需求相匹配的變化。Linix電源管理的實(shí)現機制包括以下API,例如dpm_set_os()(內核)、assert_constraint()、remove_constraint()和set_operatInK―state()(內核和驅動(dòng)程序)、set_policy()和set_task_state()(經(jīng)系統的用戶(hù)級調用)以及/proc接口。

3 在空閑模式下等待事件
很多嵌入式CPU都具有能降低功耗的電源工作模式,最常用的是空閑模式。此時(shí)CPU內核指令執行部分關(guān)閉,而所有外設和中斷信號仍處于工作狀態(tài)。由于空閑模式比CPU執行指令時(shí)的功耗要小得多,因而可以在任何時(shí)候,只要Linux檢查到所有線(xiàn)程都處于阻塞狀態(tài)(如等待中斷、事件或定時(shí)時(shí)間),它都可以將CPU置于空閑模式。任何中斷(如觸摸屏事件、按下按鍵事件等)都能把CPU從空閑模式中喚醒,然后繼續執行后面的代碼。如果事件不能直接連接到外部中斷,也可以用一個(gè)系統定時(shí)器定期喚醒CPU。例如在等待一個(gè)事件并且知道只要事件發(fā)生后在10 ms內能檢測到,那么可以啟動(dòng)lO ms定時(shí)器,并把CPU置于空閑模式。每次處理定時(shí)中斷時(shí)都要檢查事件狀態(tài),如果狀態(tài)沒(méi)有變化,就立刻回到空閑模式。

4 減少事件
通常CPU的定時(shí)中斷間隔為1 ms,Linux會(huì )頻繁使CPU置于空閑模式,并一直維持到被中斷喚醒。在這種情況下,最有可能喚醒CPU中斷的是定時(shí)器中斷本身。即使所有其他線(xiàn)程被阻塞,在其他中斷、內部事件及長(cháng)時(shí)間延遲之前,定時(shí)器中斷也會(huì )以每秒l 00()次的頻率把CPU從空閑模式中喚醒,以運行調度程序。就算調度程序確定所有線(xiàn)路都被阻塞,并很快將CPU回復到空閑模式,這樣頻繁操作也會(huì )浪費大量電源。因此,應盡可能長(cháng)時(shí)間地將CPU置于空閑模式,而減少事件是解決這個(gè)問(wèn)題的有效途徑。通過(guò)分析代碼和系統要求,以決定是否能改變處理中斷的方式實(shí)現。例如,可以在進(jìn)入空閑模式前關(guān)閉時(shí)隙中斷信號,只有再次出現中斷信號時(shí)才被喚醒。不過(guò),這種做法通常不太合適。盡管多數阻塞的線(xiàn)程可以直接或間接等待外部中斷,有些還依賴(lài)于定時(shí)中斷,如一個(gè)驅動(dòng)器會(huì )在等待外設時(shí)睡眠500 ms,這時(shí)空閑模式下如果完全關(guān)閉系統定時(shí)器,可能意味著(zhù)線(xiàn)路不能按時(shí)恢復工作。

Linux最好能為調度程序進(jìn)行可變超時(shí)設定。Lintux知道每個(gè)線(xiàn)程無(wú)法確定等待的是外部還是內部事件,或者計劃在某特定時(shí)間再次運行。Linux可算出第一個(gè)線(xiàn)程預定何時(shí)運行,并相應地在CPU置于空閑模式之前設定定時(shí)器工作??勺兂瑫r(shí)設定不會(huì )對調度程序造成很大的負擔,但卻能節省電源和處理時(shí)間。

可變計劃超時(shí)限定只是減少事件的一種方法,存儲器直接存取(DMA)也可讓CPU長(cháng)時(shí)間處于空閑模式,即使數據正在發(fā)送至外設或從外設收取。所以只要可能,都應在外圍驅動(dòng)器中使用DMA,省電效果相當令人滿(mǎn)意。

例如英特爾公司StrongARM CPU串口接收FIF0時(shí),大約每收到8個(gè)字節發(fā)生1次中斷,在115 2OO bps.速度下,發(fā)送到這個(gè)端口的11 KB脈沖數據會(huì )引起CPU內核每秒中斷l 500次,很可能使其從空閑模式中喚醒;但如果實(shí)際上不需要在這些小的8字節設備中處理數據,浪費是很驚人的。DMA最好與大容量緩沖器一起使用,以使中斷發(fā)生的水平更加容易管理,或許是每秒10次或l00次,讓CPU在兩次中斷之間空閑。事實(shí)證明,在這些場(chǎng)合應用DMA能減少使用率達20%,可降低CPU功耗,并提高供其他線(xiàn)程使用的CPU帶寬。

5 控制CPU的性能
CPU在降低功耗方面的最新進(jìn)展表明,CPU消耗的能量與驅動(dòng)CPU的時(shí)鐘頻率以及應用其內核上的電壓平方成正比。

CPU允許動(dòng)態(tài)降低時(shí)鐘速度。降低一半時(shí)鐘速度,功耗將成比例下降。但是僅采用這種技術(shù)實(shí)現節能,還需要一些技巧.因為執行的代碼可能要兩倍長(cháng)的時(shí)間才能完成,即使這樣也不會(huì )省電。例如,板上LCD控制器需要使用一個(gè)儲存在片外SDRAM中的幀緩存。當LCD控制器工作時(shí),需要指定足夠高的內存總線(xiàn)頻率來(lái)滿(mǎn)足顯示器刷新速率的需要。在LCD不工作的情況下(例如當PDA僅作為MP3播放器使用時(shí)),降低SDRAM總線(xiàn)頻率,可以節省整個(gè)系統的功耗。

動(dòng)態(tài)降低電壓是另一種做法。越來(lái)越多的CPU允許降低電壓,以適應CPU時(shí)鐘速度的下降,這樣在降低時(shí)鐘速度時(shí)也能省電。事實(shí)上,只要CPU不飽和,頻率和電壓就能不斷減少,這樣還是能完成工作,而消耗的電源總體上卻比較低。

考慮到并不是所有線(xiàn)程都消耗同樣多CPU帶寬,所以即使這些方法也還是可以改進(jìn)的。有效應用CPU帶寬的線(xiàn)程,會(huì )隨著(zhù)CPU時(shí)鐘速度下降而花更長(cháng)的時(shí)間才能完成,這些線(xiàn)程使用分配給它們的每一個(gè)周期。另一方面,I/O線(xiàn)程采用分配給它的所有CPU周期,即便CPU時(shí)鐘速率下降,也要用同樣長(cháng)的時(shí)間才能完成。例如,像很多PDA使用的PCMCIA卡接口,當數據寫(xiě)人快閃存儲卡時(shí),系統瓶頸不是CPU的速度,而是物理總線(xiàn)接口以及卡的固件為擦掉和重新編程閃存所花的時(shí)間。理想情況下,前面討論的等待事件的技術(shù)可在這里應用,以最大程度降低功耗,但是等待時(shí)間經(jīng)常變化很大,遠小于操作系統運行時(shí)間,這樣會(huì )影響到性能。這些驅動(dòng)程序常常檢測狀態(tài)寄存器,此時(shí)降低時(shí)鐘速度將節省一部分電源,但會(huì )對數據寫(xiě)入卡的時(shí)間產(chǎn)生輕微影響。

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

6 結 論
近年來(lái)隨著(zhù)計算機和網(wǎng)絡(luò )通信、消費電子合一的加速發(fā)展,嵌入式產(chǎn)品成為信息產(chǎn)業(yè)的主流。Linux在短短的十幾年時(shí)間已經(jīng)發(fā)展成為功能強大設計完善的操作系統之一,可運行在X86、Alpha、Sparc、MIPS、PPC、Motorola、NEC、ARM等多種硬件平臺上,而且開(kāi)放源代碼,并可以定制,越來(lái)越多的企業(yè)和研發(fā)機構都轉向嵌入式Linux的開(kāi)發(fā)和上。本文在系統分析的基礎上,研究了在嵌入式Linux系統中通過(guò)優(yōu)化軟件編寫(xiě)機制來(lái)降低最終產(chǎn)品功耗水平的方法,具有很強的實(shí)際應用意義。隨著(zhù)研究的深入,嵌入式Linux必將顯示出其在低功耗方面的優(yōu)越性,將有更多的嵌入式設備普及Linux應用。

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)


關(guān)鍵詞: 研究 策略 功耗 Linux 嵌入式

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>