電源管理(或者說能耗管理)是芯片設計、制造工藝、系統(tǒng)設計和軟件都在為之努力的研究課題,大家力求在各個環(huán)節(jié)盡可能的減少靜態(tài)和動態(tài)的電源消耗。傳統(tǒng)的控制電壓的調(diào)節(jié)方式和管理待機模式依然是多數(shù)電子設備正在采用的,還將繼續(xù)延續(xù)下去,但是隨著包括智能手機、導航和無線傳感網(wǎng)絡裝置,這些對電量消耗極大且永遠在線的設備的市場規(guī)模的迅速增加,電源管理已經(jīng)成為整個電子設計正在面臨的重要課題。市場研究機構isuppli首席分析師Jordan Selburn說:“功耗已經(jīng)成為電子產(chǎn)品設計的首要考慮?!?/P>
Linux操作系統(tǒng)已經(jīng)證明是在嵌入式系統(tǒng),尤其是消費電子產(chǎn)品中大量使用的一個嵌入式操作系統(tǒng)。它因為豐富的特性、完善的功能、最新的硬件支持和無版稅的商業(yè)模式得到包括半導體公司、設計公司和設備制造商的認可。對于消費電子產(chǎn)品中的Linux 技術,除了進一步優(yōu)化性能、壓縮尺寸、提高可靠性外,構建一個完善和富有彈性的電源管理系統(tǒng)已經(jīng)成為越來越緊要的項目和要求,也將成為Linux取代傳統(tǒng)RTOS、WinCE/mobile、Symbian,占據(jù)消費電子首席開源軟件(OS)地位的重要殺手锏。
Linux電源管理質(zhì)量服務
目前已經(jīng)發(fā)表的Linux版本是2.6.24和2.6.25,這兩個版本包含了下面幾個和嵌入式相關的技術。LTTng(LinuxTrace工具);電源管理質(zhì)量服務(PM QoS,也稱為QoSPM);Kpagemap——一個在userspace的應用,可以更詳盡的測量到內(nèi)存消耗的情況;Latency measurement API——一個延遲測量API,也是LatencyTOP的基礎,這個工具的姐妹組合是叫做powerTop的電量分析軟件,這是一個很有用的電源管理工具,可以分析出每個具體的應用對電量的消耗情況。最近商業(yè)的嵌入式Linux公司Montavista把它移植到mobilinux5.0產(chǎn)品里支持ARM結構;Smack——一個簡單的訪問控制的安全模塊,值得嘗試在嵌入式系統(tǒng)中使用。
這里重點討論PM QoS,構建PM QoS的目的是通過提供硬件之間可以訪問的機制,讓應用在有性能需要的時候可以給出電源管理的資源信息,在實現(xiàn)上,它是構建了一個新的內(nèi)核結構以完成需要延遲和吞吐性能的驅(qū)動程序、系統(tǒng)和應用之間的通信。
PM QoS目前發(fā)布的版本里有三個參數(shù)(pm_qos_params.c):cpu_dma_lantency、network_latency和network_throughput。使用pm_qos_init()在內(nèi)核里可以增加新的參數(shù),在userspace應用使用PM QoS就好像是驅(qū)動文件的一個特性。打開驅(qū)動文件,改變?nèi)缪舆t參數(shù)等值,寫入文件后,關閉文件就意味取消了對內(nèi)核的請求,可以自動保護避免因為可能發(fā)生宕機而損壞內(nèi)核系統(tǒng)。
在內(nèi)核API中有請求(requirement)、告知(notifier)等接口,讓需要有延遲和吞吐性能要求的驅(qū)動代表這些參數(shù)。典型的應用包括目前Intel開源實驗室開發(fā)的一個帶有PM_QoS的無線網(wǎng)卡的驅(qū)動(IW14965)。這個無線芯片有六個電源配置點,它們可以影響天線的功率,設置進入無線休眠的速度和無線AP站點之間的距離等參數(shù),這個應用使用PM QoS的延遲參數(shù)就很適合,目前這個驅(qū)動的工作還是和驅(qū)動相關,通過sysfs掛接,驅(qū)動只需要簡單的注冊并告知需要改變網(wǎng)絡延遲參數(shù)的要求,然后切換到它希望的電源管理層。
PM QoS目前主要有三個方面的應用。第一是CPU的空閑管理,這可以用在如音頻、硬盤、USB和顯示等耗電大和動作相對需要延遲的部件上。例如,圖像不需要高分辨率,那就可以關閉硬件的加速功能,而硬件加速要打開是有延遲的,設置合適延遲可以達到在不影響使用的前提下節(jié)省電量的目的。第二是WiFi應用。第三是千兆以太網(wǎng),PM QoS可以幫助控制網(wǎng)絡的延遲和帶寬的需求,以達到在可用的前提下省電的目的。例如,網(wǎng)絡瀏覽器大約可以設置成2s延遲,郵件客戶端0.5s的網(wǎng)絡延遲。PM QoS目前還很初步,現(xiàn)在主要應用是網(wǎng)絡和互聯(lián)網(wǎng)終端,相信進入Linux內(nèi)核后未來支持PM QoS的驅(qū)動程序和應用將會越來越多,對于嵌入式系統(tǒng)裝置的電源管理是一個選擇。
Linux內(nèi)核的動態(tài)電壓和電流控制接口
前面已經(jīng)提到半導體器件的功耗是兩個部分組成,一是靜態(tài)功耗,一是動態(tài)功耗。靜態(tài)功耗主要來自待機狀態(tài)的泄漏電流,相比而言動態(tài)功耗更大,例如,音視頻播放中頻率和電壓的增加會讓電量將成線形增長,動態(tài)功耗也是電源管理要解決的主要問題,解決動態(tài)功耗的方法有幾種,如IBM和Montavista合作開發(fā)DPM項目(現(xiàn)用在Montavista Mobilinux 5.0 產(chǎn)品中)和TI OMAP3430的Linux電源管理,自Wolfson微電子的Liam Girdwood最近介紹了一種稱為校準器(regulator)的動態(tài)電壓和電流控制的方法,很有參考意義和實際使用價值。
1 校準器的基本概念
所謂校準器實際是在軟件控制下把輸入的電源調(diào)節(jié)精心輸出。例如電壓的控制,輸入時5V 輸出是1.8V;電流的限制,最大20mA;簡單的切換和電源的開關等,如圖1所示。
圖1 校準器
電源域是一組校準器,設備組成、輸入可能是校準器,開關也許是電源域,電源域可以級聯(lián),電源約束可以和電源域配合以保護硬件。例如一個Internet Tablet/PMP,它由CPU、NOR Flash、音頻編解碼器、觸摸屏、LCD控制器、USB、WiFi 等其他外設組成,如圖2所示。
圖2 Internet Tablet/PMP系統(tǒng)結構
為了實現(xiàn)上面的構想,需要在內(nèi)核里建立一個校準器構架,目的就是設計一個可以控制電壓和電流的標準內(nèi)核接口以節(jié)省電能,從而盡可能的延長電池的供應。這個內(nèi)核的架構分為四個部分:針對設備驅(qū)動的消費接口(consumer)、校準器驅(qū)動的接口、系統(tǒng)配置的接口和面向應用sysfs的userspace接口。
2 Consumer的API
regulator = regulator_get(dev, “Vcc”);
其中,dev 是設備“Vcc”一個字符串代表,校準器(regulator)然后返回一個指針,也是regulator_put(regulator)使用的。
打開和關閉校準器(regulator)API如下。
int regulator_enable(regulator);
int regulator_disable(regulator);
3 電壓的API
消費者可以申請?zhí)峁┙o它們的電壓,如下所示。
int regulator_set_voltage(regulator, int min_uV, int max_uV);
在改變電壓前要檢查約束,如下所示。
regulator_set_voltage(regulator,100000,150000)
電壓值下面的設置改變?nèi)缦滤尽?BR>int regulator_get_voltage)struct regulator *regulator);
4 電流的API
電流的API也是類似,需要指出的是,校準器的方法并不一定是最高的效率,效率和加載(如加載10mA電流)、操作模式都有關系,通過下面的API可以改變模式設置。
regulator_set_optimum_mode(requlator,10000);//10mA
5 校準器的驅(qū)動和系統(tǒng)配置
在實際使用校準器之前,需要按照下面的結構寫校準器的驅(qū)動程序,然后注冊后通知給消費者使用。
struct regulator_ops {
/* get/set regulator voltage */
int (*set_voltage)(struct regulator_cdev *, int uV);
int (*get_voltage)(struct regulator_cdev *);
/* get/set regulator current */
int (*set_current)(struct regulator_cdev *, int uA);
int (*get_current)(struct regulator_cdev *);
/* enable/disable regulator */
int (*enable)(struct regulator_cdev *);
int (*disable)(struct regulator_cdev *);
int (*is_enabled)(struct regulator_cdev *);
/* get/set regulator operating mode (defined in regulator.h) */
int (*set_mode)(struct regulator_cdev *, unsigned int mode);
unsigned int (*get_mode)(struct regulator_cdev *);
/* get most efficient regulator operating mode for load */
unsigned int (*get_optimum_mode)(struct regulator_cdev *, int input_uV,
int output_uV, int load_uA);
};
完成了校準器驅(qū)動程序之后,下一步就是系統(tǒng)設置(machine specific),即匹配如電壓、LDO1和NAND等關系。
regulator_set_supply(“LDO1”,dev, “Vcc”)
對于userspace,校準器的使用是通過sysfs,但是目前所有的包括電壓、電流、操作模式、限制等信息多只是只讀信息,應該是非常適合象powerTop這樣工具的使用。
6 應用
校準器的典型的應用包括如下:CPUfreq——CPU頻率的調(diào)節(jié);CPU idle——CPU空閑模式控制;LCD背光調(diào)節(jié)——通過電流控制LED燈的亮度達到控制LCD背光的目的;音頻單元——如FM收音機在MP3使用的時候應該是關閉的,麥克風使用的時候,揚聲器的放大器應該是關閉的;NAND/NOR存儲器是耗電大戶,根據(jù)不同操作方式(讀/寫、擦除等)優(yōu)化操作模式(控制電流)達到節(jié)省電量的要求。同其他電源管理的方法比較,校準器方法具有一定的硬件獨立和抽象性,簡單實用,原理上可以適合任何有電源管理芯片支持嵌入式系統(tǒng)電源管理,目前已經(jīng)移植到Freescale MC13783、Wolfson WM8350/8400等幾個集成度很高的電源管理器件上了.
基于構件的面向CPU的電源管理技術
無論是PM_QoS、控制電壓和電流的校準器方法,還是許許多多半導體公司支持自己CPU和電源管理芯片的Linux BSP電源管理部分,都還沒有一個構建在更高層面的構件級嵌入式系統(tǒng)電源解決方案和商業(yè)產(chǎn)品。雖然包括CELF(消費和嵌入式Linux 論壇)和Intel主導的Mobile &Internet Linux項目都設立了專門的電源管理計劃(power manager project),但是顯然距離人們的要求和實際的應用還太遠了。
Montavista在過去和IBM合作開發(fā)DPM(動態(tài)電源管理)技術的基礎上,最近在專門針對手機、互聯(lián)網(wǎng)移動終端、PMP/PDN等便攜消費電子設備的mobilinux5.0上提出嵌入式電源管理技術的構件方法。Montavista的構件方式主要是針對以先進的多媒體應用處理器為核心的新一代嵌入式系統(tǒng),比如Freescale的MX31、TI OMAP2430/3430為核心的系統(tǒng)級電源管理,它包含下面幾個主要的部分。
1 動態(tài)的電壓和頻率調(diào)節(jié)
正如前面提到的,電壓和頻率的提升將會讓功耗線性增加,按照設計需要和應用的指令將電壓和頻率調(diào)節(jié)到合適的操作點可以大大降低功耗的有效方法。要想實現(xiàn)動態(tài)的電壓和頻率調(diào)節(jié)(DVFS),在內(nèi)核里CPUrefs子系統(tǒng)是關鍵的部件,如圖3所示。
圖3 CPUrefs結構
那么管理者(Governor)是按照什么情況改變操作點呢?性能要求、省電的要求、用戶的應用以及CPU的使用效率等條件都可以讓管理者改變操作模式。Mobilinux5.0提供了userspace機制充當管理者的工作,即應用可以改變操作點。
在TI OMAP3中有一個稱為SmartReflex的技術,動態(tài)調(diào)整VDD1和VDD2操作點電壓以適應芯片特性、溫度和電壓。SmartReflex技術有四個級別:0級——在工廠生產(chǎn)時優(yōu)化校準后設置的操作點;1級——引導時優(yōu)化后校準確定的操作點;2級——通過軟件循環(huán)實時優(yōu)化電壓點然后由CPU的中斷程序設置;3級——完全的硬件循環(huán)優(yōu)化電壓點,無須CPU干預,是一種硬件控制“傻瓜”操作點改變方式。無論是mobilinux5.0還是TI 3430 Linux distribution都已經(jīng)支持DVFS和SmartReflex驅(qū)動。
2 掛起和恢復
在內(nèi)核里,mobilinux5.0已經(jīng)提供支持掛起和恢復的驅(qū)動程序的功能,新的驅(qū)動必須要增加回調(diào)函數(shù)以響應系統(tǒng)休眠中關機和再次喚醒的動作。
3 支持電源管理的驅(qū)動程序
每一個驅(qū)動程序必須經(jīng)過重新的書寫支持DVFS,即當操作點改變的時候,驅(qū)動程序通過CPUrefs的告知作出響應。驅(qū)動程序還必須正確處理系統(tǒng)的掛起和恢復事件。
4 CPU空閑調(diào)節(jié)
由一個定義的處理器特定的空閑狀態(tài)點的CPUidle驅(qū)動管理、內(nèi)核的一個CPUidle 框架和管理者組成,如OMAP3430定義7個空閑狀態(tài)點。
5 應用設計策略
包括手機在內(nèi)的便攜式消費電子產(chǎn)品主要的能耗分布如圖4所示。
圖4 便攜電子產(chǎn)品能耗分布
除了CPU外,其他主要的能耗大戶是LCD背光、NOR/NAND Flash/RAM存儲器、DC/DC轉(zhuǎn)換和音視頻放大器等,例如,MPEG4的播放就是一個能耗集中的應用。
如何使用mobilinux5.0等已經(jīng)具備電源管理功能的商業(yè)嵌入式操作系統(tǒng)以使便攜電子產(chǎn)品能耗降低到最少?下面的方法是設計人員應該考慮的。
● 實際測量的結果證明使用DVFS的方法是降低CPU運行時的能耗的關鍵。當然,如何讓管理者設置操作點和狀態(tài)轉(zhuǎn)移是要設計人員全盤考慮的。
● 不要忽視CPU空閑狀態(tài)的能耗管理。mobilinux5.0的CPUrefs 和所有的驅(qū)動都已經(jīng)支持空閑的調(diào)節(jié)(idle scaling),加上內(nèi)核使用了動態(tài)滴嗒時鐘(dynamic tick),改變了過去CPU無論是否運行都按照固定的時間喚醒的方法,大大節(jié)省能源。
● 可延遲的定時器(deferrable timer)——它可以告訴內(nèi)核某個定時器不需要在時限到的時候喚醒,這將可以降低能耗。
● PowerTop工具——前面已經(jīng)提到的這個工具已經(jīng)集成到mobilinux5.0 中,而且證明對于分析系統(tǒng)空閑狀態(tài)是一個非常有用的工具。
結語
上面講了大量基于Linux的電源管理技術的實現(xiàn)方法,應該承認包括WinCE/Mobile、Symbian 等嵌入式操作系統(tǒng)的電源管理技術和操作系統(tǒng)結合的相對更加完整和容易使用,但是靈活性和開放性比較起開源的Linux要遜色的多。更加重要的是,電源管理是一個系統(tǒng)級的設計,而不僅僅是軟件設計,不斷追蹤技術發(fā)展的Linux電源管理將得到越來越多的設計人員的喜愛,使用Linux操作系統(tǒng)優(yōu)化電源管理后電子產(chǎn)品將會更加省電和長效。
參考資料:
[1] TI 公司,2008TI 亞洲技術研討會資料
[2] Montavista Mobilinux 5.0 DynamicPower Management user Guide
[3] Liam Girdwood ,Every Microamp is sacred - A dynamic voltage and current control interface for the Linux Kernel,
[4] Mark Gross, Power management quality of service and how you could use it in your embedded