位置:51电子网 » 技术资料 » 其它综合

嵌入式Linux的低功耗策略研究

发布时间:2007/8/31 0:00:00 访问次数:485

作者:国防科技大学 汤顺 赵龙


摘  要:功耗是嵌入式设备的一个十分重要的性能指标。在硬件设计和选型之后,功耗水平在极大程度上取决于软件的设计。鉴于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_ta

作者:国防科技大学 汤顺 赵龙


摘  要:功耗是嵌入式设备的一个十分重要的性能指标。在硬件设计和选型之后,功耗水平在极大程度上取决于软件的设计。鉴于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_ta

相关IC型号

Warning: Undefined variable $stockkeys in G:\website_51dzw\www.51dzw.com\code\tech\view.php on line 152

热门点击

 

推荐技术资料

罗盘误差及补偿
    造成罗盘误差的主要因素有传感器误差、其他磁材料干扰等。... [详细]
版权所有:51dzw.COM
深圳服务热线:13751165337  13692101218
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式