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