如何在基于ARM的嵌入式Linux系统上节能?

如何在基于ARM的嵌入式Linux系统上节能?,linux,embedded-linux,power-management,power-saving,Linux,Embedded Linux,Power Management,Power Saving,我计划开发一个很好的小应用程序,它将运行在基于arm的嵌入式Linux平台上;然而,由于该平台将由电池供电,我正在搜索有关如何处理节能的相关信息 获得适当的电池时间是很重要的 我认为Linux内核实现了对此的一些支持,但是我找不到关于这个主题的任何文档 欢迎任何关于如何设计我的程序和系统的意见 关于Linux内核如何解决这类问题的任何输入也是受欢迎的 其他问题: 用户空间中的程序需要做多少工作 你需要修改内核吗 哪些内核系统调用或API值得了解 更新: “自由电子”网站的相关人员似乎就

我计划开发一个很好的小应用程序,它将运行在基于arm的嵌入式Linux平台上;然而,由于该平台将由电池供电,我正在搜索有关如何处理节能的相关信息

获得适当的电池时间是很重要的

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

  • 欢迎任何关于如何设计我的程序和系统的意见

  • 关于Linux内核如何解决这类问题的任何输入也是受欢迎的

其他问题:

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

  • 你需要修改内核吗

  • 哪些内核系统调用或API值得了解


更新:

“自由电子”网站的相关人员似乎就这个主题做了一些很好的介绍

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


更新:

Adam Shiemke关于去看MeeGo项目的想法似乎是目前为止最好的建议

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

诺基亚通常擅长这类事情


更新:


人们必须小心Android,因为它的底部有一个“修改过的”Linux内核,而谷歌的一些人所做的事情并不使用基准/普通Linux内核。我认为他们的一些电源管理思想可能很难在其他项目中重复使用。

我实际上没有这样做,但我对这两个方面有经验(Linux和嵌入式电源管理)。在考虑电源管理时,会想到两个主要的Linux发行版:Android和MeeGo。MeeGo使用(据我所知)未经修改的2.6内核,并附带了一些附加功能。我没能找到很多关于他们的电源管理策略的确切信息,尽管我怀疑随着产品接近成熟,在不久的将来会有更多关于它的信息

然而,关于Android的信息还有很多。他们运行一个经过大量修改的2.6内核。您可以看到中实现的不同策略(以及内核戏剧)。其他一些链接:

我相信你可以找到更多这种性质的链接。因为这两个项目都是开源的,所以您可以获取内核代码,并可能从那些真正了解他们在表单和组中谈论的内容的人那里获得更多信息

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


希望这能有所帮助。

如果您正在编写(或至少有了)应用程序和驱动程序的源代码,那么您可以在不需要操作系统提供任何特殊支持的情况下节省大量电源

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

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

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


不要害怕稍微降低系统组件的时钟。除了省电之外,这还可以帮助他们运行得更凉爽(冷却所需的电力更少)。我见过一些设计使用的CPU比需要的功能更强大,并且有相当大的余量,而CPU的时钟不足40%(将性能降低到原来的水平,但只需功耗的一小部分)。另外,不要害怕花费电力来节省电力。也就是说,不要害怕使用CPU时间监控硬件设备来禁用/休眠它们(即使这会导致您的CPU使用更多的电源)。大多数情况下,这种折衷会带来净功耗节约。

这实际上不是你的主题,但记录你的进度可能会很方便:我正在寻找测试/测量我的嵌入式linux系统。本论坛的chris desjardins向我推荐:

我过去曾成功使用过bootchart:

下面列出了其他可能也有帮助的事情: