轉自:http://hi.baidu.com/uc100200/blog/item/cccef6b517b512de37d3ca02.html
一
、背景 機器裝的是 busybox ,使用的是最小集合的 linux 。硬體時鐘是本地時間,而核心時鐘是 UTC 時間,沒有設定時區,也沒有任何時區設定的選項。
二、需求 這台機器需要定時進行 NTP 時間同步。同步之後顯示給使用者的是本地時間。
三、過程 1 .時區的支援 ( 1 ) hwclock 為了查看硬體時鐘是否為本地時間,運行命令 hwclock –r 。結果系統提示:“ Could not open RTC: No such file or directory ”,即找不到 RTC 檔案。 ( 2 ) /dev/rtc 由於核心在編譯過程中沒有提供 RTC 支援,需要重新編譯核心(或為核心增加一個 module )。方法為,在 make menuconfig 階段,選中“ Character device ”的“ Enhanced Real Time Clock Support ”一項的支援。 為核心增加了該模組後,目錄 /proc/drive/ 下已出現了 rtc 檔案, cat 也能查看到正常的內容。但 /dev/ 目錄下仍沒有 rtc 檔案。 於是通過 mknod 命令在 /dev 目錄下增加 rtc 檔案。通過 man rtc 可以得知, RTC 為唯讀字元裝置,主 10 ,從 135 。因此命令為“ mknod /dev/rtc c 10 135”。命令執行完畢後,/dev 下成功產生了 rtc 檔案。 運行 hwclock –r ,能夠看到硬體時間為本地時間。通過 date 命令查看系統時間,卻為 UTC 時間。這說明系統沒有進行本地時間的設定。 ( 3 ) /etc/localtime Linux 的系統時區是通過符號串連 /etc/localtime 來得到的。可以通過 tzset 命令來設定時區。如果沒有該命令,可以通過命令“ ln –s /etc/localtime /usr/share/zoneinfo/Asia/Shanghai ”來將時區設定為亞洲的上海。 由於最初構建系統的時候沒有包含 zoneinfo 資訊,因此 /usr/share 目錄下不存在 zoneinfo 目錄及其檔案。所以將包含 zoneinfo 資訊的機器的 /usr/share 目錄下的整個 zoneinfo 目錄複寫到原生 /usr/share 目錄下。 通過 date 命令檢查時間,發現已變成了正常的本地時間: Mon Aug 29 13:14:29 CST 2005 ( 4 ) /etc/sysconfig/clock 該設定檔可用來設定使用者選擇何種方式顯示時間。如果硬體時鐘為本地時間,則 UTC 設為 0 ,並且不用設定環境變數 TZ 。如果硬體時鐘為 UTC 時間,則要設定 UTC 為 1 ,並設定環境變數 TZ (或設定檔 /etc/TZ )為時區資訊,如“ Asia/Shanghai ”。 我機器的硬體時間為本地時間,因此該設定檔內容為: ZONE="Asia/Shanghai" UTC=0 ARC=0 2 . NTP 同步設定 ( 1 ) ntpdate 如果只是通過 NTP 伺服器同步系統時間,可以使用命令 ntpdate (位於 /usr/sbin/ 下,使用 ntpd 會提供更佳全面的功能)。 Ntpdate 用到的庫包括: libcap.so.1 => /lib/libcap.so.1 、 libc.so.6 => /lib/tls/libc.so.6 、 /lib/ld-linux.so.2 (0xf6fdf000) 。將該命令檔案及相關的庫都複製到這台機器上,並找到一個最近的穩定的 NTP 伺服器。我使用的是 nets.org.sg ( IP : 203.117.180.36 )。運行命令“ ntpdate 203.117.180.36”,再通過date 命令查看時間,發現時間已更新。
四、相關知識 Linux 時鐘 Linux 機器裡有兩個時鐘,一個是硬體時鐘( CMOS 時鐘),一個是核心時鐘。硬體時鐘是電池驅動的,通過專門的晶片工作。可以通過 BIOS 設定屏或一些系統命令(如 hwclock )進行設定。核心時鐘是由核心維護的,啟動時從硬體讀取時間,之後獨立運行。 RTC (Real Time Clock ) 即 Linux 即時的時鐘驅動,通常 它們被嵌在電腦的晶片中,也有一些是在主板上使用Motorola MC146818(或clone)實現的。該硬體裝置可映射到/dev/rtc,供root編程訪問。 NTP (Network time protocol ) NTP 為一種網路時間協議,是一種確保網路上的主機調整時間的方法。很多地方都會提供 NTP 伺服器( ISP 或網管,也可以在 [url]http://www.eecis.udel.edu/~mills/ntp/clock[/url]1a.html 尋找一個最近的伺服器)。