驗證方法
在內核中,休眠方式有很多種,可以通過下面命令查看
# cat /sys/power/state
常用的休眠方式有freeze、standby、mem、disk
freeze:凍結I/O設備,將它們置于低功耗狀態,使處理器進入空閑狀態,喚醒最快,耗電比其它standby,
mem, disk方式高
standby:除了凍結I/O設備外,還會暫停系統,喚醒較快,耗電比其它 mem, disk方式高
mem:將運行狀態數據存到內存,并關閉外設,進入等待模式,喚醒較慢,耗電比disk方式高
disk:將運行狀態數據存到硬盤,然后關機,喚醒最慢
示例:
# echo mem > /sys/power/state
系統進入睡眠后,基本都會停掉UI、停掉串口,串口無法操作,如圖:
按下按鍵,系統恢復:
當然這里的 log 并不完整,輸入 dmesg 可以看到完整 log:
PM:power manager
具體干了什么,圖中有解釋,分為 suspend 過程和 resume 過程。
其實一個中斷讓它支持喚醒系統,最主要是多了兩個函數:suspend、resume。
suspend 函數在系統整體 suspend 的時候,會調用每個外設注冊的 suspend,我們在這個函數中調用
enable_irq_wake,表示該中斷在系統休眠時是 enable 狀態。
resume 函數在系統整體 resume 的時候,會調用每個外設注冊的 resume 函數,在 resume函數中調用 disable_irq_wake ,表示該中斷在系統運行時不需要。兩者成對使用。
大家也可以研究一下gpio_keys.c,該驅動看起來比較復雜,但是很完善,畢竟身經百戰,什么因素都考慮到了,測試就用它!
-
嵌入式
+關注
關注
5069文章
19023瀏覽量
303442 -
內核
+關注
關注
3文章
1364瀏覽量
40229 -
Linux
+關注
關注
87文章
11232瀏覽量
208940 -
按鍵
+關注
關注
4文章
223瀏覽量
57573
發布評論請先 登錄
相關推薦
評論