首页 | Linux 基础 | 资讯动态 | Linux 应用 | Linux 服务器 | Linux 开发 | Linux 安全 | 专题 | 联盟论坛
  当前位置:主页>Linux 开发>Linux 嵌入式>文章内容
嵌入式Linux系统的低功耗策略研究
来源:http://www.unix5.com 作者:riechelr_hl 发布时间:2007-08-01  

摘 要:功耗是嵌入式设备的一个十分重要的性能指标。在硬件设计和选型之后,功耗水平在极大程度上取决于软件的设计。鉴于Lioux在嵌入式设备中的应用日益广泛,提出在嵌入式Linux下软件编写的几种策略。通过这些软件编写方式,能有效降低最终产品的功耗水平。

关键词:嵌入式Linux功耗策略

引 言

由于Linux系统具有嵌入式操作系统需要的很多特色,如适应于多种CPU和多种硬件平台、性能稳定、可裁剪性很好、源码开放、开发和使用简单等。目前,基于Linux应用的嵌入式设备日益增多,Linux正在嵌入式领域发挥着越来越重要的作用。

对于嵌入式设备尤其是移动设备来说,功耗是系统的重要指标,系统设计的重要目标之一就是要尽可能地降低功耗。目前,对功耗的研究主要集中在硬件解决方案上,而软件研究方面很少。实践证明:在硬件设计和选型确定后,功耗的高低与软件设计有很大的关联性。软件设计和编程质量的好坏,极大地影响着最终产品的功耗水平。据此,为降低功耗,提出在嵌入式Linux下软件编程的几种策略。

1 问题分析

因为最终耗能的是硬件,所以在考虑采用软件方法降低功耗的时候,要充分考虑硬件的功能和性能,即在保障系统实现的基础上如何组织硬件运作而使功耗降低。全速执行、待机和睡眠等行为都是利用CPU的固有能力,透过降低工作电压或频率来节省功耗。此外,在大多数用户察觉不到的情况下,实际的电源管理能够根据负载状况逐渐改变系统的状态,有时这种情况在l s之内可以产生数百次。

另外,在编写程序时可能会遇到这样的情况,如记录状态寄存器内容,并等待设定标记出现;检查串口的FIFO状态标记,看是否收到数据;监测一个双端口存储器,以确定系统中是否有另外CPU写入了一个变量,以便控制共享资源。从表面上看,这样的代码没有什么问题,但在每个时钟周期里不断记录寄存器状态把无法有效延长设备的电池寿命。

基于这些问题,下面提出几种策略,以有效降低最终产品的功耗水平。

2 利用Linux内核的电源管理

电源管理策略的基础是调整处理器内核的工作电压和频率。不过,现代的嵌入式CPU具有非常高的电源效率,以至于CPU并不总是最主要的耗能组件。其他高耗能的组件包括高性能内存、显示屏和射频接口等,因此,如果电源管理系统只能调节CPU内核的电压和频率,那么它的用途把有限。一个真正有效的电源管理方案应该可以采用与CPU内核执行相协调或相独立的方式,支持对一系列电压和频率的快速调节。

Linux支持两种电源管理标准:APM(AdvancedPower Managememt)和ACPI(Advanced Configtlrationand P0wer Interface)。APM是传统的高级电源管理方案,目前仍然使用在许多基于Linus便携式设备中;而ACPI则提供了更为灵活的电脑和设备管理接口。这两个标准不能同时运行。缺省情况下,Linux运行ACPI。APM可以使机器处于Suspend(悬挂)或Standby(待机)状态,以及检查电池容量;而ACPI还可以使外设(如显示器、PCI)单独断电,在节省电能方面有更多的控制。为了让电源管理功能生效,需要在Linux内核打开它,并且在Linux里加载必需的应用软件。

电源管理活动需要对操作系统内核和设备驱动程序进行特殊的干预。在嵌入式Linux中,虽然低层电源管理驻留在操作系统内核中,但电源管理策略和机制来源于中介软件和用户应用程序代码,如图l所示。

 

Linux内核中电源管理机制负责维持整个系统的电源状态。它可以看成是为驱动程序、中介软件和应用程序提供服务的元素。

通过在驱动程序中实现电源管理接口,可以让驱动程序密切监控系统状态。它们在外部事件的驱动下,透过设定不同的状态反映设备的工作情况。为了实现设备电源管理接口,需要实现以下操作:

①使用pm_register对设备的每个实例(instance)进行注册;

②在对硬件进行操作之前调用pm_access(这样可保证设备已被唤醒,并处于ready状态);

③用户自己的pnl_callback函数在系统进入suspend状态,或者从suspend状态恢复的时候会被调用;

④当设备不使用时调用pm_dev_idle函数(这个操作是可选的,以增强设备idle状态的监测能力);

⑤当被unIoad的时候,使用pm_unreggister取消设备的注册。

中介程序允许用户预先定义某些策略,然后跟踪电源状态,执行特定的操作。

在应用程序中,利用中介程序提供的API,设立其基本的约束条件,强迫电源管理机制产生与其执行需求相匹配的变化。Linix电源管理的实现机制包括以下API,例如dpm_set_os()(内核)、assert_constraint()、remove_constraint()和set_operatInK—state()(内核和驱动程序)、set_policy()和set_task_state()(经系统的用户级调用)以及/proc接口。

3 在空闲模式下等待事件

很多嵌入式CPU都具有能降低功耗的电源工作模式,最常用的是空闲模式。此时CPU内核指令执行部分关闭,而所有外设和中断信号仍处于工作状态。由于空闲模式比CPU执行指令时的功耗要小得多,因而可以在任何时候,只要Linux检查到所有线程都处于阻塞状态(如等待中断、事件或定时时间),它都可以把CPU置于空闲模式。任何中断(如触摸屏事件、按下按键事件等)都能把CPU从空闲模式中唤醒,然后继续执行后面的代码。如果事件不能直接连接到外部中断,也可以用一个系统定时器定期唤醒CPU。例如在等待一个事件并且知道只要事件发生后在10 ms内能检测到,那么可以启动lO ms定时器,并把CPU置于空闲模式。每次处理定时中断时都要检查事件状态,如果状态没有变化,就立刻回到空闲模式。

共2页: 上一页 1 [2] 下一页
 
如果您对本文有任何疑问或者建议,请到论坛讨论区发表您的意见: >> 论坛入口
[收藏] [推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
  热点文章
·嵌入式Linux系统下图形库讲解及
·Qt/Embedded在嵌入式Linux中的应
·嵌入式Linux:uClinux操作系统移
·嵌入式系统 Boot Loader 技术内
·嵌入式 用户图形接口uC/GUI的简
·基于GTK+和X的GUI在嵌入式Linux
·嵌入式Linux系统下的MiniGUI研究
·Linux串口上网的简单实现 (图解)
·在Ubuntu上建立Arm Linux的开发
·嵌入式Linux操作系统启动信息完
·Linux 2.6 内核的嵌入式系统应用
·嵌入式Linux在Blackfin处理器上
  相关文章
·一种嵌入式Linux平台的软硬件设
·Qt/Embedded在嵌入式Linux中的应
·嵌入式Linux移植实时设备驱动程
·文档分析__嵌入式Linux在网络处
·Linux 2.6 内核的嵌入式系统应用
·嵌入式Linux系统下的MiniGUI研究
·嵌入式Linux系统下图形库讲解及
·嵌入式Linux操作系统名词资源讲
·Sharp Zaurus 手持式系统是嵌入
·实时嵌入式系统的图形界面支持系
·嵌入式Linux平台的多协议路由器
·三种嵌入式操作系统的深入分析与

本站信息源至:互联网络,均为学习,交流所用,如有版权问题,请联系我们.
站长QQ:397422079 E_mail:riechelr_hl@unix5.com
转载本站内容请注明原作者名.谢谢!