2010-06-22 45 views
12

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

获得体面的电池时间是非常重要的。

我认为Linux内核实现了对此的一些支持,但我找不到有关此主题的任何文档。

  • 任何关于如何设计我的程序和系统的输入是值得欢迎的。

  • 有关Linux内核如何尝试解决此类问题的任何输入也是受欢迎的。

其他问题:

  • 多少用户空间程序需要做什么?

  • 你需要修改内核吗?

  • 什么是内核系统调用或API有益于了解?


更新

这似乎是与“自由电子”网站参与制作了关于这个问题的一些很好的演示了乡亲。

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


更新

好像亚当Shiemke的想法去看待MeeGo项目可能是最好的尖端为止。

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

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


更新

一个人要小心的Android,因为它在底部的“修改” Linux内核,以及一些在谷歌的人都做不使用基线的东西/普通的Linux内核。我认为他们的一些电源管理思路可能会让其他项目重复使用起来很麻烦。

回答

9

我没有真正做到这一点,但我有两个分开的经验(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成正比)。

希望这会有所帮助。

+0

对于MeeGo(和Maemo)+1 +1 – Johan 2010-06-30 14:29:10

4

假设您正在编写(或至少具有您的应用程序和驱动程序的源代码),您可以在不需要操作系统的任何特殊支持的情况下做相当多的省电操作。

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

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

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

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

-1

这不是你的主题,但它可能会派上用场,记录你的进度:我正在寻找测试/测量我的嵌入式Linux系统。从这个论坛克里斯德贾斯丁向我推荐了这一点:

我已经成功地使用bootchart过去:

http://elinux.org/Bootchart

下面是其他的事情列表,还可以帮助:

http://elinux.org/Boot_Time

+0

-1,这个回答对于这个问题没有任何帮助。这应该是一个评论? – aditya 2014-05-26 10:44:06