歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux內核

Linux內核的動態電壓和電流控制接口(regulator&dvfs)

Linux內核的動態電壓和電流控制接口
  前面已經提到半導體器件的功耗是兩個部分組成,一是靜態功耗,一是動態功耗。靜態功耗主要來自待機狀態的洩漏電流,相比而言動態功耗更大,例如,音視頻播放中頻率和電壓的增加會讓電量將成線形增長,動態功耗也是電源管理要解決的主要問題,解決動態功耗的方法有幾種,如IBM和Montavista合作開發DPM項目(現用在Montavista Mobilinux 5.0 產品中)和TI OMAP3430的Linux電源管理,自Wolfson微電子的Liam Girdwood最近介紹了一種稱為校准器(regulator)的動態電壓和電流控制的方法,很有參考意義和實際使用價值。
 1 校准器的基本概念
  所謂校准器實際是在軟件控制下把輸入的電源調節精心輸出。例如電壓的控制,輸入時5V 輸出是1.8V;電流的限制,最大20mA;簡單的切換和電源的開關等,如圖1所示。

圖1 校准器
  電源域是一組校准器,設備組成、輸入可能是校准器,開關也許是電源域,電源域可以級聯,電源約束可以和電源域配合以保護硬件。例如一個Internet Tablet/PMP,它由CPU、NOR Flash、音頻編解碼器、觸摸屏、LCD控制器、USB、WiFi 等其他外設組成,如圖2所示。

圖2 Internet Tablet/PMP系統結構
  為了實現上面的構想,需要在內核裡建立一個校准器構架,目的就是設計一個可以控制電壓和電流的標准內核接口以節省電能,從而盡可能的延長電池的供應。這個內核的架構分為四個部分:針對設備驅動的消費接口(consumer)、校准器驅動的接口、系統配置的接口和面向應用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
  消費者可以申請提供給它們的電壓,如下所示。
  int regulator_set_voltage(regulator, int min_uV, int max_uV);
  在改變電壓前要檢查約束,如下所示。
  regulator_set_voltage(regulator,100000,150000)
  電壓值下面的設置改變如下所示。
  int regulator_get_voltage)struct regulator *regulator);
  4 電流的API
  電流的API也是類似,需要指出的是,校准器的方法並不一定是最高的效率,效率和加載(如加載10mA電流)、操作模式都有關系,通過下面的API可以改變模式設置。
  regulator_set_optimum_mode(requlator,10000);//10mA
  5 校准器的驅動和系統配置
  在實際使用校准器之前,需要按照下面的結構寫校准器的驅動程序,然後注冊後通知給消費者使用。

  完成了校准器驅動程序之後,下一步就是系統設置(machine specific),即匹配如電壓、LDO1和NAND等關系。
  regulator_set_supply(“LDO1”,dev, “Vcc”)
  對於userspace,校准器的使用是通過sysfs,但是目前所有的包括電壓、電流、操作模式、限制等信息多只是只讀信息,應該是非常適合象powerTop這樣工具的使用。
  6 應用
  校准器的典型的應用包括如下:CPUfreq——CPU頻率的調節;CPU idle——CPU空閒模式控制;LCD背光調節——通過電流控制LED燈的亮度達到控制LCD背光的目的;音頻單元——如FM收音機在MP3使用的時候應該是關閉的,麥克風使用的時候,揚聲器的放大器應該是關閉的;NAND/NOR存儲器是耗電大戶,根據不同操作方式(讀/寫、擦除等)優化操作模式(控制電流)達到節省電量的要求。同其他電源管理的方法比較,校准器方法具有一定的硬件獨立和抽象性,簡單實用,原理上可以適合任何有電源管理芯片支持嵌入式系統電源管理,目前已經移植到Freescale
MC13783、Wolfson WM8350/8400等幾個集成度很高的電源管理器件上了.
  基於構件的面向CPU的電源管理技術
  無論是PM_QoS、控制電壓和電流的校准器方法,還是許許多多半導體公司支持自己CPU和電源管理芯片的Linux BSP電源管理部分,都還沒有一個構建在更高層面的構件級嵌入式系統電源解決方案和商業產品。雖然包括CELF(消費和嵌入式Linux 論壇)和Intel主導的Mobile &Internet Linux項目都設立了專門的電源管理計劃(power manager project),但是顯然距離人們的要求和實際的應用還太遠了。
  Montavista在過去和IBM合作開發DPM(動態電源管理)技術的基礎上,最近在專門針對手機、互聯網移動終端、PMP/PDN等便攜消費電子設備的mobilinux5.0上提出嵌入式電源管理技術的構件方法。Montavista的構件方式主要是針對以先進的多媒體應用處理器為核心的新一代嵌入式系統,比如Freescale的MX31、TI OMAP2430/3430為核心的系統級電源管理,它包含下面幾個主要的部分。
1 動態的電壓和頻率調節
  正如前面提到的,電壓和頻率的提升將會讓功耗線性增加,按照設計需要和應用的指令將電壓和頻率調節到合適的操作點可以大大降低功耗的有效方法。要想實現動態的電壓和頻率調節(DVFS),在內核裡CPUrefs子系統是關鍵的部件,如圖3所示。

圖3 CPUrefs結構
  那麼管理者(Governor)是按照什麼情況改變操作點呢?性能要求、省電的要求、用戶的應用以及CPU的使用效率等條件都可以讓管理者改變操作模式。Mobilinux5.0提供了userspace機制充當管理者的工作,即應用可以改變操作點。
  在TI OMAP3中有一個稱為SmartReflex的技術,動態調整VDD1和VDD2操作點電壓以適應芯片特性、溫度和電壓。SmartReflex技術有四個級別:0級——在工廠生產時優化校准後設置的操作點;1級——引導時優化後校准確定的操作點;2級——通過軟件循環實時優化電壓點然後由CPU的中斷程序設置;3級——完全的硬件循環優化電壓點,無須CPU干預,是一種硬件控制“傻瓜”操作點改變方式。無論是mobilinux5.0還是TI 3430 Linux distribution都已經支持DVFS和SmartReflex驅動。
  2 掛起和恢復
  在內核裡,mobilinux5.0已經提供支持掛起和恢復的驅動程序的功能,新的驅動必須要增加回調函數以響應系統休眠中關機和再次喚醒的動作。
  3 支持電源管理的驅動程序
  每一個驅動程序必須經過重新的書寫支持DVFS,即當操作點改變的時候,驅動程序通過CPUrefs的告知作出響應。驅動程序還必須正確處理系統的掛起和恢復事件。
  4 CPU空閒調節
  由一個定義的處理器特定的空閒狀態點的CPUidle驅動管理、內核的一個CPUidle 框架和管理者組成,如OMAP3430定義7個空閒狀態點。
  5 應用設計策略
  包括手機在內的便攜式消費電子產品主要的能耗分布如圖4所示。

圖4 便攜電子產品能耗分布
  除了CPU外,其他主要的能耗大戶是LCD背光、NOR/NAND Flash/RAM存儲器、DC/DC轉換和音視頻放大器等,例如,MPEG4的播放就是一個能耗集中的應用。
  如何使用mobilinux5.0等已經具備電源管理功能的商業嵌入式操作系統以使便攜電子產品能耗降低到最少?下面的方法是設計人員應該考慮的。
實際測量的結果證明使用DVFS的方法是降低CPU運行時的能耗的關鍵。當然,如何讓管理者設置操作點和狀態轉移是要設計人員全盤考慮的。
不要忽視CPU空閒狀態的能耗管理。mobilinux5.0的CPUrefs 和所有的驅動都已經支持空閒的調節(idle scaling),加上內核使用了動態滴嗒時鐘(dynamic tick),改變了過去CPU無論是否運行都按照固定的時間喚醒的方法,大大節省能源。
可延遲的定時器(deferrable timer)——它可以告訴內核某個定時器不需要在時限到的時候喚醒,這將可以降低能耗。
PowerTop工具——前面已經提到的這個工具已經集成到mobilinux5.0 中,而且證明對於分析系統空閒狀態是一個非常有用的工具。
Copyright © Linux教程網 All Rights Reserved