Linux系統的很多功能都需要讀取時間爲基礎。比如:日誌系統需要時間戳以記錄log,爲後期的問題排查提供支撐;cron服務需要正確的時間設置以支撐週期性、特定時間點執行某個任務;等等。大多數Linux桌面系統都提供了豐富、友好的時間設置接口,很方便用戶進行時間設置,但是在定製化、特殊性很強的嵌入式設備中,時間的設置有時不是那麼容易。本文全面剖析linux-arm嵌入式設備的時間設置細節。
硬件時間和系統時間
- 硬件時間
硬件時間又稱爲RTC、CMOS時鐘,它由主板電池供電,獨立於系統運行,當系統關機、斷電時依然維護時間,爲系統提供時間基準。 - 系統時間
系統時間又稱爲內核時鐘、軟件時鐘。在系統啓動階段它從硬件時間獲得,之後通過timer定時中斷的機制獨立維護。linux應用、服務均是基於系統時間,而不是硬件時間。
hwclock和date命令
hwclock爲硬件時間操作命令,date爲系統時間操作命令。
hwclock、date分別顯示硬件時間和系統時間。
可以通過date -s設置系統時間。
hwclock -s用於將硬件時間同步給系統時間。
hwclock -w用於將系統時間同步給硬件時間。
Linux rtc驅動
硬件時間的必備條件是需要確保linux內核中Real Time Clock被選中。
rtc加載成功之後在/dev目錄中產生相應節點。
網絡時間同步
對於具有互聯網接入能力的嵌入式設備,系統時間可以從網絡時間服務器進行同步,需要ntpdate命令的支持。
下載ntp源碼包
下載地址:http://download.csdn.net/detail/messidona11/9734990
解壓
tar xvzf ntp-4.2.4p7.tar.gz
配置ntp源碼
./configure –prefix=$PWD/install –exec-prefix=$PWD/install –host=arm-linux CC=arm-none-linux-gnueabi-gcc
注意:需要將arm-none-linux-gnueabi-gcc改爲你自己的gcc交叉編譯器名稱
編譯
執行make&make install命令後,如果不報錯則在_install目錄中產生bin、lib、man三個文件夾,其中bin目錄中的ntpdate爲我們需要的命令。
將ntpdate拷貝到linux-arm設備的環境變量中,使用chmod u+x ntpdate給予執行權限。
通過ntpdate獲取網絡時間
時區配置方法
- UTC時間
Coordinated Universal Time 世界協調時間,又稱世界標準時間、世界統一時間。 - 本地時間
本地時間=UTC + /- 時區 - 時區設置方法之一:
設置環境變量TZ (或者在etc目錄下添加文件TZ,內容寫爲CTS-8)
export TZ=CST-8
date -u顯示UTC時間,date命令顯示本地時間,本地時間爲UTC時間根據時區換算得來。
從上圖可以看出本地時間比UTC時間早8小時,CST-8爲東八區。
BTW:可以將時間同步命令加入到crontab中週期性從時間服務器同步。