Linux ACPI Suspend with WakeAlarm setting

今天在晚上快8:30點的時候, 我被同事Josh問了一個問題, 主要是在問在Linux下面有沒有方法可以讓系統進入S1/S3/S4 suspend的時候, 能夠定時讓系統被叫起來, 說真的我一開始也不懂...所以就開始亂試, 印象中之前好像有看過類似的工具, 所以也到Google 上找了一下。

以前的 Windows HCT 和現在的 DTM test 裡, 就有工具可以讓它Loop進入S3並定時自己喚醒的測試程式, 也有單獨的工具比如像是PassMark Sleeper不過好像在Linux下很少有這樣的工具。

後來在網路上找到一篇有用的文章「ACPI Wakeup」裡面有說明如何設定定時從S1/S3回來。 我是在SLES11上試了Suspend to RAM WakeAlarm Timer 的簡單方法, 參考裡面的範例把喚醒的時間設為1分鐘...試完之後結果真的可以呢~ 超高興, 系統會在時間到時自動的被叫起來 :D

echo 0 > /sys/class/rtc/rtc0/wakealarm
echo `date '+%s' -d '+ 1 minutes'` > /sys/class/rtc/rtc0/wakealarm
pm-suspend

第1與2步驟主要是在歸零和設定定時, 進入S3 (Suspend to RAM) 主要是第3個命令, 如果要進入S1只要換這命令就好了, 1&2步不用動, 以這個script再配上shell 的 loop 就可以做長時間的測試啦。

又學到新東東了 ^^


新補充: 另外, 如果發現不能正常work的話可能要檢查一定系統的hwclock時間, RTC wakealarm 似乎是以hwclock時間為準的...所設的時區也許會影響它的功能, 這時可以先執行 hwclock -w 先進行sync, 再繼續測試 :)