基于Linux的便携嵌入式设备电源管理解决方案

发布者:binggege最新更新时间:2012-04-05 来源: 微处理机关键字:电源管理  Linux系统  系统调用 手机看文章 扫描二维码
随时随地手机看文章

前 言
 
随着各种便携嵌入式设备性能的日益提高,功能日益丰富,其电源紧张的问题也日益突出,国内新推出的某些具有PDA等多种功能的智能电话在密集使用下只能维持半天,多数摄像机和数码相机在一次充电后都只有一个小时左右的累积工作时间。Linux作为一个开放源代码的操作系统,拥有非常丰富的软件资源和平台支持,这使得嵌入式系统开发的周期大大缩短,越来越多的商用和通用嵌入式系统都采用Linux作为软件平台。因此有必要对Linux系统的电源管理机制进行深入研究。 

Linux内核电源管理机制分析 

Linux作为一个强大而成熟的操作系统,本身提供了一套从用户空间到系统空间的,由上而下的软件电源管理机制。

电源管理子系统 

Linux内核实现了一个电源管理子系统用于统一管理每个设备。源代码pm.h和pm.c中定义和实现了主要的接口函数。如表1所示。 
        
  
 通过这些接口函数就可以将自己的硬件设备纳入电源管理子系统使其成为系统电源管理的一部分。这需要在编写设备驱动程序的时候完成下面的工作: 

(1)在初始化驱动时,使用pm_ register对设备的每个实例( instance)进行注册;在清除驱动时使用pm_unregister来取消设备的注册。
(2)在对硬件进行操作之前调用pm_access (这样会保证设备已被唤醒并且处于ready状态) 。
(3)编写自己的pm _callback函数。开发人员应该在设备或系统进入suspend状态时保留设备和系统的上下文到安全的地方,并在设备或系统re -sume时恢复其上下文,使之能够继续运行,编写pm_callback函数是驱动实现设备电源管理的重点。
(4)当设备不在被使用的时候调用pm_dev_idle函数,这个操作是可选的,可以增强设备idle状态的监测能力。 

电源管理设备 

将设备加入到电源管理子系统后,该设备就已经有了处理电源管理请求的能力,但是系统的电源管理行为并不会主动发生。因此还需要一个电源管理设备来接受用户请求,产生电源管理行为。这里所指的设备并不是一个真实的硬件设备,而是一个在Linux系统空间里接受用户控制的虚拟设备,它可以是一个简单的字符型设备。有了这个设备,就可以方便的实现来自于用户空间的电源管理请求和方案。Linux电源管理行为过程如图1所示。[page]



图1 Linux电源管理行为过程 


Linux的电源管理机制在iPAQ上的应用 

iPAQ 是康柏公司(现在已和惠普公司合并)推出的基于StrongARM CPU 的高性能掌上电脑,不仅提供了卓越的个人信息管理工具,还集成了较为强大的多媒体功能和其他娱乐功能。Linux 2.4的内核已经被成功的移植到上面,基于Linux系统众多的应用软件也已经或正在被移植。 

iPAQ硬件耗电量分析 

要实现对iPAQ 耗电量的有效调节,就必须清楚各个硬件耗电量,从而确定出需要管理和调节的对象。iPAQ上的各种硬件的耗电量比例如图2所示。



图2 iPAQ上的各种硬件的耗电量比例 


可见, Frontlight、LCD、SDRAM、Audio、CPU等是主要的耗电设备,应该尽可能的减少这些设备的工作时间和强度,以减少耗电量,其关键步骤如下:首先,开启SDRAM的自动节能模式。iPAQ所使用的SA -1110支持SDRAM的自动节能模式;在这种模式中,当内存不被使用时, CPU 将关闭输入到内存的时钟信号,内存停止工作;这样将减少大约190mW的功率。 

接着,调节显示驱动。可以选择 ( 1)在必要的时候关闭背光; ( 2)降低LCD的刷新率。LCD在正常情况下刷新率是60Hz,通过调节LCD 定时器可以调节LCD的刷新率使其低于60Hz。降低LCD刷新率后,可以减少SDRAM,总线的使用和减少功耗; (3)在不使用屏幕的时候关闭LCD控制器。

随后,降低时钟频率。SA - 1110的时钟频率可以在57. 3MHz到214. 8MHz之间动态调节。降低CPU时钟频率可以减少CPU本身的功耗,同时也能减少时钟由CPU提供的其他硬件的功耗。例如: SA- 1110工作在最低频率时可比工作在最高频率时减少100mW到200mW的功耗。 

最后,关闭音频芯片。在不使用声音的时候,尽量关闭音频芯片,并保持CPU 到音频芯片的低输入。 [page]

通过Linux电源管理机制及上层应用实现对iPAQ电源管理和耗电量调节 

确定了要调控的对象和方法后,需要通过L inux的电源管理机制和上层应用软件来实现对这些硬件设备的控制。这包括编写CPU电源管理代码、外设驱动程序及电源管理代码、电源管理设备实现代码和用户空间控制应用代码。

(1)实现SA - 1110进入Sleep电源模式的代码

SA -1110有Normal, Idle, Sleep 等几种电源模式,其中在Sleep模式下, SA -1110具有最小的电力消耗。由于SA -1110 进入Sleep 模式后,到外设和SDRAM的时钟将停止,多数的寄存器信息将丢失。因此需要事先将重要的寄存器值保存到内存中,并将SDRAM设置为自刷新模式,以保持 SDRAM中的数据。当SA -1110 收到硬件中断等唤醒源退出Sleep模式后不会接着执行先前未执行的指令,而是回到初始状态去执行启动代码。因此为了让CPU在唤醒后能够持续的工作,需要将返回代码的地址保存到PowerManager Scratch Pad Register ( PSPR)寄存器中,使得启动代码能让CPU重新跳到返回代码的地址处,执行返回代码从而回到睡眠前的工作。

SA - 1110进入Sleep模式的代码片断如下:
extern void cpu_sa1110_resume ( void) ; /3 SA - 1110返回函
数3 /
extern int cpu_sa1110_do_suspend ( void) ; /3 SA - 1110睡眠
函数3 /
int sa1110_suspend ( void)
{
. . .
cli ( ) ; /3 关闭中断3 /
sys_ctx. osmr0 = OSMR0; /3 保存重要的寄存器3 /
. . .
sys_ctx. p sdr = PSDR;
. . .
PSPR = virt_to_phys ( cpu_sa1100_resume) ; /3 设置返回函
数地址3 /
cpu_sa1110_do_suspend ( ) ; /3 进入睡眠3 /
/3 退出睡眠3 /
GPDR = sys_ctx. gpdr; /3 恢复寄存器3 /
GRER = sys_ctx. grer;
GFER = sys_ctx. gfer;
GAFR = sys_ctx. gafr;
. . .
sti ( ) ; /3 启动中断3 /
return 0;
}

(2)实现各个外设的电源管理代码

利用Linux内核提供电源管理子系统,可以将iPAQ中的每个需要实现电源管理的外部设备纳入统一的管理。这需要在各个设备的驱动程序中使用电源管理子系统的接口函数(如2. 1所描述)和实际的硬件操作代码,这里将以显示设备为例:
/3 SA - 1110 frame buffer电源管理请求处理函数3 /
static int sa1110fb_pm_callback ( struct pm_dev 3 pm_dev, pm
_request_t req, void 3 data)
{
struct sa1110fb_info 3 fbi = pm_dev - > data;
if ( req = = PM_SUSPEND | | req = = PM_RESUME) {
int state = ( int) data;
if ( state = = 0) {
set_ctrlr_ state ( fbi, C_ENABLE) ; /3 进入D0 模式,开启
LCD控制器3 /
} else {
set_ctrlr_state ( fbi, C_D ISABLE) ; /3 进入D1 - D3模式关
闭LCD 控制器. 3 /
} }
return 0;
}
/3 SA - 1110 frame buffer驱动初始化函数3 /
int __init sa1110fb_init ( void)
{
struct sa1110fb_info 3 fbi;
int ret;
. . .
/3 在电源管理子系统中注册3 /
fbi - > pm = pm _ register ( PM _SYS_DEV, PM _SYS_VGA,
sa1110fb_pm_callback) ;
if ( fbi - > pm)
fbi - > pm - > data = fbi; /3 设置私有数据3 / . . .
return ret;
} [page]

(3)实现电源管理设备
 
这个设备实际是用于接受用户空间程序的控制所用,所以只需要简单的实现“ioctl”调用就可以了。
/3 ioctl调用方法3 /
static int do_ioctl ( struct inode 3 inode, struct file 3 filp, u_int
cmd, u_long arg)
{ . . .
switch ( cmd) {
case APM_ IOC_STANDBY: {
pm_send_all ( PM_SUSPEND, ( void 3 ) 2) ; /3 外设挂起3 /
} break;
case APM_ IOC_RESUME: {
pm_send_all ( PM_RESUME, ( void 3 ) 0) ; /3 外设唤醒3 /
} break;
case APM_ IOC_SUSPEND: {
pm_send_all ( PM_SUSPEND, ( void 3 ) 2) ; /3 外设挂起3 /
sa1110_suspend ( ) ; /3 CPU进入休眠模式3 /
/3 CPU醒来,继续执行3 /
pm_send_all ( PM_RESUME, ( void 3 ) 0) ; /3 唤醒外设3 /
} break;
default:
return - EINVAL;
}
return 0;


最后,使用命令“mknod /dev/ apm c 254 0”,可以在文件系统中建立起该设备的访问节点。该节点名为/dev/ apm,是一个字符设备( c) ,主设备号为254,此设备号为0。

(4)编写用户空间电源管理程序
 
用户可以在适当的时候选择是否改变CPU的时钟频率和显示刷新率,是否关闭某些外部设备,是否使整个系统进入睡眠模式等等。这只需要使用系统调用“ioctl”对电源管理设备( /dev/ apm)发送命令就可以了。
int fd;
. . .
fd = open ( " /dev/ apm" , O_RDONLY) ; /3 打开电源管理设
备3 /
ioctl ( fd, APM_ IOC_SUSPEND,NULL) ; /3 发送电源管理命
令3 /
close ( fd) ; /3 关闭电源管理设备3 / 

实现iPAQ电源管理前后耗电量比较 

实现电源管理以前:开启LCD, CPU 处于空闲状态,大多数其他芯片关闭,功耗为470mW。实现电源管理以后:在电源管理前的基础上开启SDRAM 的自动节能模式,功耗下降到280mW。然后降低LCD刷新率到30Hz, 功耗下降到238mW。再把CPU频率降低到57. 3MHz,功耗下降到172mW。最后关闭LCD,功耗下降到98mW。可见,通过本文方案的调节和优化, iPAQ的耗电量确实可以得到有效地改善,最大优化后的耗电量仅为优化前的五分之一,从而大大提高了iPAQ的电池使用时间。 

结 论

在嵌入式设备中,电源管理是一个硬件和软件相结合的系统工程。本文介绍了已有的节能方法和Linux电源管理的机制, 并且以iPAQ 为例通过Linux的电源管理机制和上层应用软件,设计和实现了一个较完整和有效的电源管理方案,为众多基于Linux系统的嵌入式设备的电源管理提供了一个有用的参考。

关键字:电源管理  Linux系统  系统调用 引用地址:基于Linux的便携嵌入式设备电源管理解决方案

上一篇:基于Linux的嵌入式闸门智能监控系统
下一篇:基于WindowsCE的HIRFL-CSR前端控制系统设计与实现

推荐阅读最新更新时间:2024-03-16 12:56

解决电池组件中过量电流“泄漏”问题
很多现代便携式设备发货时都必须安装电池,以便客户无需电池安装或充电便可立即开启设备。如果连接至电池的组件有过量电流“泄漏”,那设备到客户手中时可能就没电了。所有组件都有漏电流情况,尽管 IC 组件是主要元凶,但电容器、电路板脏污和湿度也具有不可预测的漏电等级。 解决这个问题并非小事。将负载从电池完全断开时可获得最长闲置时间,但任何上电检测电路都需要连接电池才能工作。此外,PCB 面积在很多电池供电应用中也非常重要,很难为单个锁存开关电路调整空间。 一种简单直接的方法是使用简单的 P 型 MOSFET (PMOS) 和 N 型 MOSFET (NMOS) 锁存器断开电池。 然而,这个看似简单的电路可导致不可靠的性能。开关
[模拟电子]
多样化LED背光市场需求及技术应用电路特点解析
在越来越多的新兴需求和绿色节能趋势推动下,能够提升 电源 能效的电源和 电源管理 技术的应用将快速增长,背光就是一种典型的应用需求。虽然目前 液晶电视 的背光源仍以传统冷阴极荧光灯( CCFL )为主,但随着全球节能环保意识的日益增强,新型发光二极管( LED )背光源已广受关注,成为CCFL的有力竞争者。在 便携式 应用方面, 液晶 背光 LED驱动 方案更需要满足高能效、延长电池使用时间、减小印制电路板面积等要求。本文将结合 安森美 半导体 的解决方案探讨背光市场和应用的特点及需求。    背光应用的需求和挑战   LED具有高色彩饱和度、环保耐用等优点,已在各种中小尺寸 LCD 面板 中大量应用,目前正逐步向
[电源管理]
多样化LED背光市场需求及技术应用电路特点解析
IR 推出 IGBT 在线选择工具 优化电源管理设计
      国际整流器公司 (International Rectifier,简称IR) 推出全新的绝缘栅双极晶体管 (IGBT) 在线选择工具。该工具可有效优化多种应用设计,包括马达驱动、不间断电源系统 (UPS)、太阳能逆变器和焊接。       IR全新的IGBT在线选择工具能评估总线电压、开关频率和短路保护要求等应用条件。新在线工具位于mypower.irf.com/IGBT,不但可以提供预估损耗,还可以建议一些能够在给定限制条件内运行的器件。该工具还为每个零件提供了定价,使设计人员能够考虑有关器件的选择对系统成本带来的影响。       IR 亚洲区销售副总裁潘大伟表示:“IR提供了一系列IGBT产品,为不
[电源管理]
IR 推出 IGBT 在线选择工具 优化<font color='red'>电源管理</font>设计
从IIC看电源管理芯片的发展态势
随着2008年奥运会的到来和中国政府节能减排工作的不断深入,对 电源管理 芯片的需求将不断提升。同时,数字电视、3G手机等新兴产品, MP3 和数码相机等消费类市场,甚至打着绿色交通革命的旗帜所带来的电动自行车市场需求,都将拉动市场对于电源管理 芯片 的需求。虽然中国电源管理芯片市场的 发展 速度放慢是一种必然趋势,但未来5年,中国电源管理芯片市场还将保持快速发展的势头,电源管理产品仍将是集成电路产品中最为活跃的产品之一。它的发展速度将仍然高于全球市场,其复合增长率仍将高于20%。 来自市调机构iSuppli公司的数据显示,2003年到2008年全球电源管理 芯片 销售的年复合增长率为12.7﹪,2008年的销售额将上升
[焦点新闻]
电动摩托车中电源管理设计方案
想象一下:在晴朗夏日,您骑着摩托车在高速路上飞驰,阳光洒在脸上,头发在风中飞舞。当人们想到摩托车时,很多人脑海中会浮现这样的画面,而不会立即考虑摩托车有多创新,尤其是赛车。 Brammo Motorsports 是总部位于美国俄勒冈州的领先电动车技术公司,该公司已走在大功率电池创新的最前沿。Brammo 始终致力于设计和开发电动汽车,包括获奖的 Enertia® 和 Empulse®。他们实际上正在构建一些比汽油动力摩托车更环保的最高性能电动摩托车。 电池管理技术将不断改善各公司利用大功率电池进行创新设计的方法。如今,大功率电池已经广泛应用于从电动工具及吸尘器机器人到叉车和电网能源存储系统等各个方面。 Brammo 的高端
[电源管理]
OnSemiNCL30160恒流高亮LED驱动解决方案
On Semi公司的NCL30160是恒流高亮LED驱动器,集成了1.0A MOSFET,输入电压从6.3V到40V,开关频率高达1.4MHz,其滞后控制在负载瞬变和PWM调光时具有良好的电源抑制和快速反应,不需要控制回路补偿,可调整LED电流,主要用在LED驱动器,恒流源,汽车照明,通用照明和工业照明.本文介绍了NCL30160主要特性,方框图,应用电路以及评估板NCL30160GEVB主要特性,电路图,材料清单和评估板NCL30160GEVB测试程序. NCL30160GEVB:Up to 40V, 1A NCL30160 LED Driver Buck Evaluation Board 1.0A Constant-Curren
[电源管理]
OnSemiNCL30160恒流高亮LED驱动解决方案
iTOP-4418开发板Qt和最小linux系统-扩展root
本文档介绍如何修改 iTOP-4418 开发板用户区大小。文档中的分区数据是针对 16G 的 eMMC。 uboot 设置 进入 iTOP-4418 的 uboot,如下图所示。 输入命令: setenv fastboot flash=mmc,2:uboot:2nd:0x200,0x78000;flash=mmc,2:2ndboot:2nd:0x200,0x4000;flas h=mmc,2:bootloader:boot:0x8000,0x70000;flash=mmc,2:boot:ext4:0x00100000,0x040 00000;flash=mmc,2:system:ext4:0x04100000,0x34000
[单片机]
iTOP-4418开发板Qt和最小<font color='red'>linux系统</font>-扩展root
具有三种自适应电荷泵模式的高效LED电源管理IC
在便携式设备对低功耗要求日益严苛的形势下,对更高效率电源管理IC的需求更加迫切,显示屏和指示灯所消耗的功率在手持设备总功耗中占有相当大的比例,因此对其进行高效的电源管理对于降低设备总功耗、延长电池使用寿命来说非常关键。 Maxim公司LED电源管理器件MAX1707可同时为多个显示屏、指示灯和闪光灯提供所需电源,对于需要同时为多个显示屏提供背光照明以及驱动多种指示灯的蜂窝电话、智能电话、LED显示器、PDA、数码相机、便携式摄像机等应用来说是一种理想选择。 电荷泵具有较低的高度、小占板面积和高转换效率等优点,对延长电池使用时间和实现相对较低的成本来说是不错的选择。MAX1707带有1倍/1.5倍/2倍的电荷泵,可以自动地在这三
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved