2010-06-22 81 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