如何在基于ARM的embedded式Linux系统上节电?

我打算开发一个可以在基于arm的embedded式Linux平台上运行的漂亮的小应用程序; 但是,由于该平台将由电池供电,因此我正在寻找有关如何处理节电的相关信息。

获得不错的电池时间是重要的。

我认为Linux内核为此提供了一些支持,但我无法find关于此主题的任何文档。

其他问题:

  • 用户空间中的程序需要做多less?

  • 你需要修改内核吗?

  • 什么内核系统调用或API是很好的了解?


更新

似乎参与“自由电子”网站的人已经就这个问题做了一些很好的介绍。

  • http://free-electrons.com/services/power-management/
  • http://free-electrons.com/docs/power
  • http://free-electrons.com/docs/optimizations

但也许别人有更多关于这个问题的信息?


更新

看起来像Adam Shiemke的想法去看看MeeGo项目可能是迄今为止最好的提示。

这可能是目前最好的电池供电embedded式Linux项目。

诺基亚通常善于处理这类事情。


更新

一个人必须小心Android的底部,因为它有一个“修改”的Linux内核,谷歌的人所做的一些事情不使用基准/正常的Linux内核。 我认为他们的一些电源pipe理思路可能会让其他项目重用起来很麻烦。

我没有真正做到这一点,但我有两个分开的经验(Linux和嵌入式电源管理)。 在考虑电源管理,Android和MeeGo时,有两个主要的Linux发行版让人想起。 MeeGo使用(据我所知)一个未修改的2.6内核,挂着一些额外的东西。 虽然我怀疑在产品接近成熟的时候,在不久的将来会出现更多的功率管理策略,但我无法确切地发现他们的功率管理策略。

然而,Android上有更多的信息。 他们运行一个相当大的修改2.6内核。 您可以在http://elinux.org/Android_Power_Management (以及内核戏剧)中看到不同的策略。 其他一些链接:

https://groups.google.com/group/android-kernel/browse_thread/thread/ee356c298276ad00/472613d15af746ea?lnk=raot&pli=1

http://www.ok-labs.com/blog/entry/context-switching-in-context/

我相信你可以找到更多的这种性质的链接。 由于这两个项目都是开源的,你可以获取内核代码,并且可能从那些真正知道他们正在以形式和组合的方式进行讨论的人获得更多的信息。

在驱动程序级别,您需要确保您的驱动程序可以正确处理未使用的挂起和关闭设备。 针对移动市场的大多数设备都提供非常细致的支持,以关闭各个组件,并调整时钟设置(请记住,功耗与时钟^ 2成正比)。

希望这可以帮助。

假设您正在编写应用程序和驱动程序(至少具有源代码),则无需操作系统的任何特殊支持即可省电。

您的驱动程序需要能够禁用其关联的设备,并使其恢复,而不需要重新启动或引入系统不稳定。 如果您的设备连接到PCI / PCIe总线,请研究它们支持的电源状态(D0 – D3)以及您的驱动程序在这些低功耗模式之间转换时需要做些什么。 如果选择要使用的硬件设备,请查找遵守PCI电源管理规范或具有类似功能(例如睡眠模式和“唤醒”中断信号)的设备。

当您的设备启动时,每个有能力检测是否连接到任何设备的设备都需要这样做。 如果任何端口或总线检测到它们没有被使用,请将它们断电或使其进入睡眠状态。 一个充满力量,但没有使用的港口可能浪费更多的权力,比你想象的要多。 根据您的特定硬件和使用情况,使用监控设备使用情况,识别未使用/闲置资源并适当运行(如硬件的“屏幕保护程序”)的后台应用程序可能也很有用。

您的应用软件应该确保在尝试使用硬件设备之前先检测硬件设备是否已经上电。 如果您需要访问可能处于低功耗模式的设备,则应用程序需要能够处理等待设备唤醒和响应的潜在冗长延迟。 你的应用程序也应该考虑到设备的睡眠需求。 如果您需要将一系列命令发送到硬件设备,请尝试将其缓冲起来并一次全部发送出去,而不是将它们间隔出来,并需要多个唤醒 – 发送 – >休眠周期。

不要害怕让你的系统组件稍微低点。 除了省电之外,这可以帮助他们运行较冷(这需要较少的冷却功率)。 我已经看到一些使用CPU的设计,其功能比必要的功能强大得多,但是它的性能低于40%(将性能降低到原来的水平,但功耗却只有很小的一部分) 。 另外,不要害怕花费电力来节省电力。 也就是说,不要害怕使用CPU时间监视硬件设备来禁用/休眠它们(即使它会导致CPU使用更多的功率)。 大多数情况下,这种权衡会导致净节能。

这实际上不是你的主题,但它可能会方便地记录你的进度:我正在寻找测试/测量我的嵌入式Linux系统。 克里斯desjardins从这个论坛推荐我这样:

我过去成功地使用过bootchart:

http://elinux.org/Bootchart

以下列出的其他内容也可能有所帮助:

http://elinux.org/Boot_Time