Linux電源管理研究筆記—acpid工作原理
轉載時請註明出處:http://blog.csdn.net/absurd/
在手持功能設計中,電源管理曆來為重要的研究課題之一。我們日常所說的省電就屬於電源管理的範疇,這也是我們最關心的一個部分。通過掛起不必要的裝置、降低CPU的頻率或者其它方法,可以減少能量的消耗,達到省電的目的。電源管理實際上是一個系統工程,從應用程式到核心架構,再到裝置驅動和硬體裝置,都要參與進來,才能達到電源管理的最佳化。本文介紹一下acpid的工作原理。
ACPI是Advanced Configuration and Power Interface縮寫,acpid中的d則代表daemon。Acpid是一個使用者空間的服務進程,它充當linux核心與應用程式之間通訊的介面,負責將kernel中的電源管理事件轉寄給應用程式。
acpid與核心的通訊方式:acpid用poll函數掛在/proc/acpi/event檔案上。核心在drivers/acpi/event.c中實現了該檔案的介面,一旦匯流排事件列表(acpi_bus_event_list)上有電源管理事件發生,核心就會喚醒掛在 /proc/acpi/event上的acpid,acpid再從/proc/acpi/event中讀取相應的事件。
acpid與應用程式的通訊方式有兩種,其一是通過本地socket,其檔案名稱為/var/run/acpid.socket,應用程式只要串連到這個socket上,不用發送任何命令就可以接收到acpid轉寄的電源管理事件。
其二是通過設定檔。在acpid收到來自核心的電源管理事件時,根據設定檔中的規則執行指定的命令。設定檔在/etc/acpi/events/目錄下,下面是一個樣本:
event=button/power.*
action=/sbin/shutdown -h now
事件的格式為:device_class bus_id type data。device_class和bus_id是字串,type和data是十六制整數。在設定檔中可以使用萬用字元,來匹配指定的事件。
~~end~~