基于Linux的便攜嵌入式設備電源管理解決方案
前 言
隨著各種便攜嵌入式設備性能的日益提高,功能日益豐富,其電源緊張的問題也日益突出,國內新推出的某些具有PDA等多種功能的智能電話在密集使用下只能維持半天,多數攝像機和數碼相機在一次充電后都只有一個小時左右的累積工作時間。Linux作為一個開放源代碼的操作系統,擁有非常豐富的軟件資源和平臺支持,這使得嵌入式系統開發的周期大大縮短,越來越多的商用和通用嵌入式系統都采用Linux作為軟件平臺。因此有必要對Linux系統的電源管理機制進行深入研究。
Linux內核電源管理機制分析
Linux作為一個強大而成熟的操作系統,本身提供了一套從用戶空間到系統空間的,由上而下的軟件電源管理機制。
電源管理子系統
Linux內核實現了一個電源管理子系統用于統一管理每個設備。源代碼pm.h和pm.c中定義和實現了主要的接口函數。如表1所示。
通過這些接口函數就可以將自己的硬件設備納入電源管理子系統使其成為系統電源管理的一部分。這需要在編寫設備驅動程序的時候完成下面的工作:
(1)在初始化驅動時,使用pm_ register對設備的每個實例( instance)進行注冊;在清除驅動時使用pm_unregister來取消設備的注冊。
(2)在對硬件進行操作之前調用pm_access (這樣會保證設備已被喚醒并且處于ready狀態) 。
(3)編寫自己的pm _callback函數。開發人員應該在設備或系統進入suspend狀態時保留設備和系統的上下文到安全的地方,并在設備或系統re -sume時恢復其上下文,使之能夠繼續運行,編寫pm_callback函數是驅動實現設備電源管理的重點。
(4)當設備不在被使用的時候調用pm_dev_idle函數,這個操作是可選的,可以增強設備idle狀態的監測能力。
電源管理設備
將設備加入到電源管理子系統后,該設備就已經有了處理電源管理請求的能力,但是系統的電源管理行為并不會主動發生。因此還需要一個電源管理設備來接受用戶請求,產生電源管理行為。這里所指的設備并不是一個真實的硬件設備,而是一個在Linux系統空間里接受用戶控制的虛擬設備,它可以是一個簡單的字符型設備。有了這個設備,就可以方便的實現來自于用戶空間的電源管理請求和方案。Linux電源管理行為過程如圖1所示。
評論