如何在基于ARM的嵌入式Linux系统上省电?

时间:2010-06-22 11:09:49

标签: linux embedded-linux power-management power-saving

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

获得合适的电池时间非常重要。

我认为Linux内核已经为此实现了一些支持,但是我找不到关于这个主题的任何文档。

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

  • 欢迎任何关于Linux内核如何解决此类问题的输入。

其他问题:

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

  • 你需要修改内核吗?

  • 哪些内核系统调用或API很容易了解?


更新

似乎参与“自由电子”网站的人们就这个主题做了一些很好的演示。

但也许其他人有关于这个主题的更多信息?


更新

看来Adam Shiemke关于MeeGo项目的想法似乎是迄今为止最好的提示。

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

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


更新

人们必须小心Android,因为它底部有一个“修改过的”Linux内核,Google的一些人所做的一些事情并没有使用基线/普通的Linux内核。我认为他们的一些电源管理想法对于其他项目的重用可能会很麻烦。

3 个答案:

答案 0 :(得分:10)

我实际上并没有这样做,但我有两个分开的经验(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成正比)。

希望这有帮助。

答案 1 :(得分:5)

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

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

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

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

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

答案 2 :(得分:-1)

这实际上不是你的主题,但它可能会派上用场来记录你的进度:我正在寻找测试/测量我的嵌入式linux系统。来自这个论坛的chris desjardins向我推荐了这个:

我过去成功使用过bootchart:

http://elinux.org/Bootchart

以下列出了其他可能有用的内容:

http://elinux.org/Boot_Time