新聞中心

linux RTC測試

作者: 時間:2016-10-08 來源:網(wǎng)絡 收藏

先簡單介紹date與hwclock的異同。

本文引用地址:http://2s4d.com/article/201610/305939.htm

相同點:都是表示時間的。

差異點:

date 是表示系統(tǒng)的時間,假如在系統(tǒng)啟動時沒有設置的話,系統(tǒng)都會從1970年開始。

hwclock是表示硬件的時間,如時鐘芯片或主芯片自帶的rtc里面的時間。

Date就不做介紹了,看下hwclock

# hwclock --help

BusyBox v1.14.1 (2010-01-22 10:35:16 CST) multi-call binary

Usage: hwclock [-r] [-s] [-w] [-l] [-u] [-f FILE]

Query and set hardware clock (RTC)

Options:

-r Show hardware clock time

-s Set system time from hardware clock

-w Set hardware clock to system time

-u Hardware clock is in UTC

-l Hardware clock is in local time

-f FILE Use specified device (e.g. /dev/rtc2)

應該說解釋的很詳細了,但是-s與-w選項,我個人覺得解釋的會讓人誤解,可以這么理解

-s Set system time from hardware clock 從硬件時鐘讀取數(shù)據(jù)到系統(tǒng)時鐘,主要用于剛開始時,系統(tǒng)時鐘從硬件時鐘讀取時間信息,如果沒有這步,則系統(tǒng)時間就會為1970年了。

-w Set hardware clock to system time 把系統(tǒng)時鐘設置到硬件時鐘里面,主要用于設置硬件時鐘的時間,比如在使用busybox制作的根文件系統(tǒng)中,要設置時間有2個步驟:1,先使用date設置系統(tǒng)時間;2,再利用hwclock –w把當前系統(tǒng)時間寫到硬件時鐘里面。如果沒有第二步,下次啟動時,系統(tǒng)時間是不會更新的。

可以看看下面例子:

# date

Thu Jan 1 12:10:11 UTC 1970

# hwclock

Thu Jan 1 12:10:13 1970 0.000000 seconds

時間是一致的(當然了秒不一樣,是我操作需要時間的原因)

用date 設置下時間

# date -s 13:00:00

Thu Jan 1 13:00:00 UTC 1970

# date

Thu Jan 1 13:00:02 UTC 1970

# hwclock

Thu Jan 1 12:14:27 1970 0.000000 seconds

很明顯設置后date 與hwclock顯示不一樣

然后,使用

# hwclock -w

# date

Thu Jan 1 13:01:27 UTC 1970

# hwclock

Thu Jan 1 13:01:29 1970 0.000000 seconds

很明顯,時間又一致了。

然后,再來看下驅(qū)動。

先把at91sam9263自帶的rtc配置上,啟動的時候提示

rtc-at91sam9 at91_rtt.0: hctosys: unable to read the hardware clock

于是用hwclock來檢查,到底是哪里出了問題

# hwclock

hwclock: can't open '/dev/misc/rtc': No such file or directory

沒有這個設備,需要建立一個

查看下rtc設備號

# cat /proc/devices

Character devices:

1 mem

2 pty

3 ttyp

4 /dev/vc/0

4 tty

4 ttyS

5 /dev/tty

5 /dev/console

5 /dev/ptmx

7 vcs

10 misc

13 input

90 mtd

128 ptm

136 pts

153 spi

253 pcmcia

254 rtc

Block devices:

1 ramdisk

7 loop

31 mtdblock

179 mmc

#

rtc是254,建立設備

# mknod /dev/misc/rtc c 254 0

這里查看下busybox的源碼

int FAST_FUNC rtc_xopen(const char **default_rtc, int flags)

{

int rtc;

if (!*default_rtc) {

*default_rtc = /dev/rtc;

rtc = open(*default_rtc, flags);

if (rtc >= 0)

return rtc;

*default_rtc = /dev/rtc0;

rtc = open(*default_rtc, flags);

if (rtc >= 0)

return rtc;

*default_rtc = /dev/misc/rtc;

}

return xopen(*default_rtc, flags);

}

就會發(fā)現(xiàn)調(diào)用hwclock時做了3次嘗試,隨便你用/dev/rtc,/dev/rtc0,/dev/misc/rtc哪個設備都可以,若3個都沒有就會提示錯誤。

為了簡單,以后就弄個/dev/rtc0

# mknod /dev/rtc0 c 254 0

再用hwclock 查看下

# hwclock

Thu Jan 1 00:05:41 1970 0.000000 seconds

就有了時間了。

如果時鐘芯片或主芯片自帶的時鐘格式有問題的話,會出現(xiàn)如下錯誤

# hwclock

hwclock: RTC_RD_TIME: Invalid or incomplete multibyte or wide character

這里就需要把系統(tǒng)的時間設置到時鐘芯片或主芯片自帶的rtc里面去,如下

#hwclock –w

然后rtc就可以用了。



關鍵詞:

評論


相關推薦

技術(shù)專區(qū)

關閉