QQ...隔了一個月的時間,終於又發文了,前段時間都在準備研討會的報告,真是令人緊張到爆阿,還好順利的結束了。
在ARM版中利用RTC時間設定linux系統時間
在 Linux 系統中的時鐘,可分為硬體時鐘及系統時鐘。硬體時鐘可以依賴輔助電源(電池)持續累計時間;而系統時鐘則每次重新啟動就會重置,所以一般 Linux 在開機時會做個和硬體時鐘同步的動作(hwclock -s),但是在 Embedded Linux 中是要手動操作的(如果沒有設定CONFIG_RTC_HCTOSYS=y)。
1. 重新編譯 Kernel 選項 (我使用的kernel似乎沒有這個選項,SO這個部份沒做。)
CONFIG_RTC_HCTOSYS=y
2. 使用 hwclock
先利用 date 指令調整好系統時間,再用 hwclock -w 寫入硬體時鐘,往後開機只要自動執行用 hwclock -s 即可抓到正確的時間囉!
剛拿回來的板子若尚未做任何的設定,可以先執行date跟hwclock這兩個指令來看它初始的狀態。
在上圖中ㄧ開始date指令可以看到初始的linux系統時間,接下來經過設定改變它的日期時間。接下來執行hwclock可以看到他的初始時間,並經由
hwclock –w將linux系統時間寫入到硬體時間中,接下來就可以看到經過設定的硬體時間,不像剛開始初始的時間ㄧ樣停留不動。
設定好之後基本上只要硬體時間有電池可以支撐,那麼就算板子關掉重開也不會影響到設定好的硬體時間。
但是在重新開機之後會出現一個情況,linux的系統時間還是回復到了初始狀態,但是硬體時間則是維持原修改的狀態,繼續計數時間。
為了解決這個情況可以透過hwclock –s這個指令,將硬體時間設定給linux系統時間。
Hwclock參數設定如下:
hwclock: invalid option -- h
BusyBox v1.13.1 (2009-03-27 21:00:34 CST) multi-call binary
Usage: hwclock [-r|--show] [-s|--hctosys] [-w|--systohc] [-l|--localtime] [-u|--
utc] [-f FILE]
Query and set hardware clock (RTC)
Options:
-r Show hardware clock time
-s Set system time from hardware clock
-w Set hardware clock to system time
-u Hardware clock is in UTC
-l Hardware clock is in local time
-f FILE Use specified device (e.g. /dev/rtc2)
為了節省麻煩每次重新開機都要自己設定ㄧ次,可以透過啟動命令稿的編譯讓它自動執行。我是寫在/etc/profile中。
修改好之後可以在下圖中看到進入系統之後直接自行調整好時間。
參考資料:
http://keepworking-keepwalking.blogspot.com/2008/09/linux-rtc-driver.html
留言列表