Happiness is a form of courage。
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原始碼包
解壓
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
export TZ=CST-8
date -u顯示UTC時間,date命令顯示本地時間,本地時間為UTC時間根據時區換算得來。
從上圖可以看出本地時間比UTC時間早8小時,CST-8為東八區。
BTW:可以將時間同步命令加入到crontab中週期性從時間伺服器同步。