摘 要: 針對(duì)采用Linux操作系統(tǒng)的處于長(zhǎng)期供電狀態(tài)下的產(chǎn)品的節(jié)能情況做了一定的分析,分析了Linux和Android操作系統(tǒng)的節(jié)能方案,,提出不同功能和使用環(huán)境的產(chǎn)品要分別做對(duì)應(yīng)的節(jié)能處理的思想,,最后以數(shù)字對(duì)講產(chǎn)品為例,闡述了具體實(shí)現(xiàn)過(guò)程,。
關(guān)鍵詞: Linux,;休眠;節(jié)能,;S5PV210
0 引言
采用Linux系統(tǒng)的非便攜式產(chǎn)品指的是產(chǎn)品不存在電池供電,,具有長(zhǎng)期穩(wěn)定電源供電并采用Linux操作系統(tǒng)平臺(tái)的一類產(chǎn)品。例如數(shù)字樓宇對(duì)講產(chǎn)品,、智能網(wǎng)絡(luò)產(chǎn)品,、智能家居產(chǎn)品等。
與之相對(duì)的是便攜式產(chǎn)品,。目前在便攜式產(chǎn)品領(lǐng)域,如智能手機(jī)產(chǎn)品,、平板電腦產(chǎn)品等,,普遍采用谷歌Android或者蘋果ios操作系統(tǒng),這些操作系統(tǒng)針對(duì)電池供電的系統(tǒng)做了精心的優(yōu)化,,盡可能地保持產(chǎn)品處于低功耗的工作模式,,保證電池最大限度的續(xù)航時(shí)間。但是在本文提及的非便攜式產(chǎn)品領(lǐng)域,由于不存在電池供電的苛刻環(huán)境,,加之Linux操作系統(tǒng)是一個(gè)通用的操作系統(tǒng),,沒(méi)有針對(duì)某類產(chǎn)品做出特別的優(yōu)化措施,導(dǎo)致開發(fā)者和使用者都沒(méi)有將節(jié)能問(wèn)題作為一個(gè)重要問(wèn)題進(jìn)行思考,。在全球環(huán)境不斷惡化,、節(jié)能減排呼聲日益高漲的背景下,越來(lái)越需要開發(fā)更加節(jié)能環(huán)保的產(chǎn)品,。本文基于這個(gè)目的,,按照Linux系統(tǒng)節(jié)能的設(shè)計(jì)方法,結(jié)合產(chǎn)品的具體功能和使用環(huán)境,,做了一些有益的探索和研究,。
1 硬件能耗分布情況
這里提取一般嵌入式產(chǎn)品的幾大部分進(jìn)行分析。對(duì)于一般嵌入式產(chǎn)品而言,,主要是由處理器芯片及其外圍電路加上本產(chǎn)品所需的功能芯片及其外圍電路組成,。隨著集成電路技術(shù)的日新月異,現(xiàn)在的處理器芯片內(nèi)部集成了多種功能電路,,構(gòu)成了一個(gè)龐大的耗能系統(tǒng),。
圖1為一個(gè)簡(jiǎn)單功能的產(chǎn)品硬件示意圖,箭頭指示了功耗流向,,橢圓形部分是各部件功耗的大致說(shuō)明,。由圖可見(jiàn),對(duì)于一個(gè)嵌入式產(chǎn)品而言,,解決產(chǎn)品功耗問(wèn)題,,也就是要解決CPU功耗和外設(shè)功耗問(wèn)題,需要從CPU和各外設(shè)的電源,、頻率管理部分入手,。目前處理器芯片和一些外設(shè)芯片都具備有低功耗模式,硬件對(duì)節(jié)能的支持是完善的,,需要軟件進(jìn)行合理處理,,達(dá)到降低功耗的目的。下面首先分析一下操作系統(tǒng)是如何解決這個(gè)問(wèn)題的,。
2 Linux操作系統(tǒng)和Android操作系統(tǒng)節(jié)能設(shè)計(jì)方案
2.1 Linux操作系統(tǒng)節(jié)能方案設(shè)計(jì)
Linux操作系統(tǒng)設(shè)計(jì)了兩種標(biāo)準(zhǔn)來(lái)解決節(jié)能問(wèn)題,,一種是Advanced Power Management(APM),另外一種是Advanced Configuration and Power Interface (ACPI),。這兩種方案都是針對(duì)X86架構(gòu)上存儲(chǔ)在Bios芯片中的Linux電源管理機(jī)制而設(shè)計(jì)的,。由于嵌入式系統(tǒng)不存在Bios芯片,目前的解決方法是模擬ACPI狀態(tài)的方式實(shí)現(xiàn)電源管理,,目前ACPI按程度不同有4種睡眠狀態(tài)[1],,如表1所示,。
由于嵌入式系統(tǒng)的特殊性,目前Linux操作系統(tǒng)針對(duì)嵌入式處理器睡眠狀態(tài)主要是模擬Suspend to RAM(mem)狀態(tài),,即ACPI睡眠狀態(tài)S3,。
Linux操作系統(tǒng)針對(duì)嵌入式處理器睡眠狀態(tài)具體的操作實(shí)現(xiàn)過(guò)程是同Linux內(nèi)核框架、驅(qū)動(dòng)模型(LDM)密切相關(guān)的,,正常的睡眠實(shí)現(xiàn)過(guò)程如圖2所示,。
圖中虛線框內(nèi)是對(duì)所有注冊(cè)到dpm_list的設(shè)備進(jìn)行休眠,按照LDM的設(shè)備類型,,這些設(shè)備包括class,、type、bus等[2],,但凡有一個(gè)注冊(cè)的設(shè)備休眠失敗,,則整個(gè)休眠中斷,系統(tǒng)恢復(fù)到休眠前的狀態(tài),。
2.2 Android操作系統(tǒng)節(jié)能方案設(shè)計(jì)
Android操作系統(tǒng)是基于Linux操作系統(tǒng),,針對(duì)手機(jī)、便攜式產(chǎn)品做了特別優(yōu)化的一款操作系統(tǒng),。此類產(chǎn)品在節(jié)能方面要求極高,,同時(shí)需要靈活的節(jié)能方法來(lái)完成產(chǎn)品需要的不同功能,這里簡(jiǎn)單分析一下該系統(tǒng)的節(jié)能過(guò)程,。
Android操作系統(tǒng)的節(jié)能解決方案框架還是依賴Linux操作系統(tǒng)的,。但是標(biāo)準(zhǔn)Linux操作系統(tǒng)的節(jié)能解決方案解決不了手機(jī)所必須的兩項(xiàng)功能:
(1)手機(jī)要支持在LCD屏幕關(guān)閉的狀態(tài)下,,后臺(tái)應(yīng)用程序依然保持工作(因?yàn)長(zhǎng)CD屏幕是耗電大戶),。例如播放歌曲的線程在屏幕關(guān)閉的情況下可以正常運(yùn)行。
?。?)應(yīng)用程序須具備阻止系統(tǒng)進(jìn)入休眠狀態(tài)的能力,。譬如手機(jī)正在長(zhǎng)時(shí)間的播放視頻,這個(gè)時(shí)候系統(tǒng)進(jìn)入休眠狀態(tài)顯然是不可以的,。
為了滿足這兩類產(chǎn)品功能的需要,,Android操作系統(tǒng)在標(biāo)準(zhǔn)Linux操作系統(tǒng)上引入了Early Suspend/Late resume機(jī)制和Wake Lock機(jī)制[3]。
Early Suspend/Late resume機(jī)制解決了諸如耗電大戶LCD,、觸摸屏等組件提前關(guān)閉而不影響應(yīng)用程序正常工作的問(wèn)題,。其實(shí)現(xiàn)機(jī)制是在Linux正常的休眠狀態(tài)基礎(chǔ)上增加了一個(gè)early suspend狀態(tài),這個(gè)狀態(tài)可以休眠需要提前休眠的設(shè)備組件,,達(dá)到一定的節(jié)能效果,。
Wake Lock機(jī)制實(shí)質(zhì)上是一個(gè)鎖機(jī)制。系統(tǒng)在進(jìn)入休眠狀態(tài)前會(huì)檢測(cè)這個(gè)鎖,,如果應(yīng)用程序事先申請(qǐng)了一個(gè)wake lock,,則系統(tǒng)就認(rèn)為此次休眠條件不成立,拒絕此次休眠要求,。Android系統(tǒng)設(shè)計(jì)了兩種類型的wake lock,,一種是WAKE_LOCK_SUSPEND(阻止系統(tǒng)進(jìn)入休眠狀態(tài)),一種是WAKE_LOCK_IDLE(阻止系統(tǒng)進(jìn)入空隙狀態(tài)),。同時(shí)還可以設(shè)定應(yīng)用程序擁有wake lock的時(shí)間機(jī)制,,時(shí)間到就會(huì)自動(dòng)釋放該鎖。這使得Wake Lock機(jī)制可以靈活應(yīng)對(duì)各種復(fù)雜的場(chǎng)合,。
圖3為Android系統(tǒng)的休眠流程,。
3 非便攜式產(chǎn)品功耗問(wèn)題的不足及應(yīng)對(duì)方案
作為基于PC設(shè)備發(fā)展起來(lái)的操作系統(tǒng),Linux操作系統(tǒng)目前已經(jīng)成功應(yīng)用在ARM,、MIPS等多種架構(gòu)處理器平臺(tái)下,,衍生出種類繁多的產(chǎn)品形態(tài)。由于各種產(chǎn)品形態(tài)功能,、要求各不相同,,Linux操作系統(tǒng)無(wú)法提供一種“大而全”的解決方案。這就需要產(chǎn)品開發(fā)者根據(jù)自己開發(fā)的產(chǎn)品的特殊要求和功能,,在標(biāo)準(zhǔn)Linux系統(tǒng)平臺(tái)上,,通過(guò)類似于前文所述Android系統(tǒng)的節(jié)能解決方案,提出自己的解決方案,。
本文以作者開發(fā)的一款非便攜式產(chǎn)品——數(shù)字樓宇對(duì)講設(shè)備為例進(jìn)行闡述,。該數(shù)字樓宇對(duì)講設(shè)備以韓國(guó)三星公司生產(chǎn)的S5PV210(ARM Cortex-A8內(nèi)核)作為主處理器芯片,搭配Linux2.6.35.7操作系統(tǒng),。該類產(chǎn)品按安裝位置和產(chǎn)品形態(tài)不同,,可以分為室內(nèi)機(jī)、梯口機(jī),、圍墻機(jī)和管理機(jī)等,。功能上以室內(nèi)機(jī)為例,室內(nèi)機(jī)安裝于用戶室內(nèi),,可以響應(yīng)梯口機(jī),、管理機(jī)的以太網(wǎng)呼叫,實(shí)現(xiàn)開鎖功能,;也可以呼叫其他室內(nèi)機(jī),、管理機(jī);本機(jī)還可以實(shí)現(xiàn)多種類似平板電腦的功能供用戶休閑娛樂(lè)使用,。
室內(nèi)機(jī)作為一種典型的長(zhǎng)期供電設(shè)備,,在實(shí)際使用環(huán)境中大部分時(shí)間都是空閑的,如果不采取一種良好的節(jié)能措施,,勢(shì)必造成能源的浪費(fèi),。如果采用標(biāo)準(zhǔn)Linux的節(jié)能方案,,則會(huì)帶來(lái)以下問(wèn)題:S5PV210不支持WOL(Wake On Lan)功能,即休眠后無(wú)法通過(guò)網(wǎng)絡(luò)喚醒設(shè)備,。
為了解決這個(gè)問(wèn)題,,需要對(duì)Linux標(biāo)準(zhǔn)節(jié)能方案進(jìn)行改造。為了支持網(wǎng)絡(luò)喚醒功能,,需要在系統(tǒng)休眠狀態(tài)下保持網(wǎng)絡(luò)芯片正常工作,,保持應(yīng)用程序?qū)W(wǎng)絡(luò)響應(yīng)的線程不休眠,這樣才能響應(yīng)其他設(shè)備通過(guò)網(wǎng)絡(luò)進(jìn)行的呼叫,。如要保持線程的正常工作,,則CPU也必須處在工作狀態(tài)。以以上需求為基本出發(fā)點(diǎn),,修改Linux標(biāo)準(zhǔn)節(jié)能方案,,如圖4所示。
4 結(jié)論
通過(guò)對(duì)Linux的標(biāo)準(zhǔn)節(jié)能流程進(jìn)行改造,,那些非便攜式產(chǎn)品也可以在具體的使用場(chǎng)合實(shí)現(xiàn)節(jié)能的目標(biāo),。由于基于Linux系統(tǒng)的產(chǎn)品種類繁多,各自都有不同的功能和節(jié)能目標(biāo),,因此需要工程師深入了解Linux標(biāo)準(zhǔn)節(jié)能流程,,同時(shí)還要對(duì)節(jié)能目標(biāo)有清晰的認(rèn)識(shí),才能達(dá)到預(yù)期的節(jié)能效果,。
參考文獻(xiàn)
[1] Hewlett-Packard Corporation, Intel Corporation,,Microsoft Corporation, et al. Advanced configuration and power interface specification,Revision 5.0a[EB/OL].(2013-11) [2014-07-01]. http://acpi.info/spec.htm.
[2] Corbet J, Rubini A,Greg K H. Linux設(shè)備驅(qū)動(dòng)程序(第三版)[M].魏永明 , 耿岳 , 鐘書毅, 譯.北京:中國(guó)電力出版社,,2006.
[3] Google Corporation. Android power manager, Android 4.4 r1 [EB/OL].(2014-07)[2014-07]. http://developer.android.com/ intl/zh-cn/reference/android/os/PowerManager.html#.