Linux内核的动态电压和电流控制接口(regulator&dvfs)

Linux内核的动态电压和电流控制接口

  前面已经提到半导体器件的功耗是两个部分组成,一是静态功耗,一是动态功耗。静态功耗主要来自待机状态的泄漏电流,相比而言动态功耗更大,例如,音视频播放中频率和电压的增加会让电量将成线形增长,动态功耗也是电源管理要解决的主要问题,解决动态功耗的方法有几种,如IBM和Montavista合作开发DPM项目(现用在Montavista Mobilinux 5.0 产品中)和TI OMAP3430的Linux电源管理,自Wolfson微电子的Liam Girdwood最近介绍了一种称为校准器(regulator)的动态电压和电流控制的方法,很有参考意义和实际使用价值。

        1 校准器的基本概念

  所谓校准器实际是在软件控制下把输入的电源调节精心输出。例如电压的控制,输入时5V 输出是1.8V;电流的限制,最大20mA;简单的切换和电源的开关等,如图1所示。

Linux内核的动态电压和电流控制接口(regulator&dvfs)_第1张图片

图1 校准器

  电源域是一组校准器,设备组成、输入可能是校准器,开关也许是电源域,电源域可以级联,电源约束可以和电源域配合以保护硬件。例如一个Internet Tablet/PMP,它由CPU、NOR Flash、音频编解码器、触摸屏、LCD控制器、USB、WiFi 等其他外设组成,如图2所示。

Linux内核的动态电压和电流控制接口(regulator&dvfs)_第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 校准器的驱动和系统配置

  在实际使用校准器之前,需要按照下面的结构写校准器的驱动程序,然后注册后通知给消费者使用。

Linux内核的动态电压和电流控制接口(regulator&dvfs)_第3张图片

  完成了校准器驱动程序之后,下一步就是系统设置(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所示。

Linux内核的动态电压和电流控制接口(regulator&dvfs)_第4张图片

图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所示。

Linux内核的动态电压和电流控制接口(regulator&dvfs)_第5张图片

图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 中,而且证明对于分析系统空闲状态是一个非常有用的工具。

 

你可能感兴趣的:(Linux内核的动态电压和电流控制接口(regulator&dvfs))