Fork me on GitHub

6/07/2012

[Android] wake lock

"wake lock" was a set of patches to the Linux kernel to allow a caller to prevent the system from going to low power state.

所以,在 kernel 下,可以運用這種機制,讓系統不要進入 suspend。

  1. 加入必要 header

    #include <linux/wakelock.h>
    
  2. 初始化 wake lock

    wake_lock_init(&wlock, WAKE_LOCK_SUSPEND, "hdmi_active");
    
    
    通常在 module init 函數或是 probe 函數當中進行這個動作。第二個參數可設定為 WAKE_LOCK_IDLE / WAKE_LOCK_SUSPEND
    
  3. 鎖住 wake lock

    wake_lock(&wlock);
    
  4. 釋放 wake lock

    wake_unlock(&wlock);
    
  5. 註銷 wake lock

    wake_lock_destroy(&wlock);
    

在程式碼中完成後,如何驗證 wake lock 是否正確的被 lock/unlock 呢?可以利用不斷 cat proc/wakelocks 這個 node,觀察其變化。如果已經被 unlock 了,那麼 time 的欄位就會停止變動。

watch -n 1 'adb shell "cat proc/wakelocks" | grep usb_udc_lock' 

Ref.

  1. Android Power Management
  2. Android wakelock的申請和釋放

No comments:

Post a Comment