1. 程式人生 > >Happiness is a form of courage。

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中週期性從時間伺服器同步。