2011年6月9日 星期四

busybox 下的校時

[修正一下以前的問題..]
busybox 我不知道幾版開始有支援 ntpd (ntp server/client), 而這個 ntpd 的用法跟以前的 ntptime/ntpdate 有點差別...

ntpd 對 time server 校時 (假設 server 用 watch.stdtime.gov.tw):
#
mv /etc/localtime /etc/_localtime
ntpd -nqp watch.stdtime.gov.tw
hwclock -w
mv /etc/_localtime /etc/localtime
#

這樣就可以將 ntpd 抓回來的時間設定在 RTC 上.

但如果此時 /etc/localtime 沒有東西的話, ntpd 會抓回沒有 GTM 修正的時間, 系統時間 (date) 也不會有 GTM offset 修正. 這時還要再加上 /etc/localtime 的設定, 才會有 GTM 的 offset.
這裡是中華民國臺北 (嚴正強調絕不是中國台北), 時區是 GTM+8, 時區資料在 /usr/share/zoneinfo/Asia/Taipei, 可以直接 ln -s /usr/share/zoneinfo/Asia/Taipei /etc/localtime 或乾脆直接把檔案 co 過去變 localtime 檔案, 這樣系統時間會參考 /etc/localtime 的資料, 修正為當地時區時間.

但 1.18.4 版的 busybox 似乎有個問題, /etc/localtime 存在時, ntpd 抓回來的時間也會自動做 GTM offset 修正, 如果此時剛上述一樣, 後面再做一個 hwclock -w 的動作時, h/w RTC 被存進去的時間就不再是沒有 GTM offset 的時間, 而是被加過的時間, 然後下次開機回來看時, 會發現系統時間被設定成 GTM offset 被加過兩次的時間....

所以 ntpd 在抓時間時, 要先把 /etc/localtime 先給 hidden 起來, 讓 ntpd 抓到的都是 GTM+0 的時間. 待 ntpd 設定好時間後, 再把 /etc/localtime 修正回來, 讓系統時間回到 GTM+offset 的時間上..

沒有留言: