linux RTC測試
先簡(jiǎn)單介紹date與hwclock的異同。
本文引用地址:http://dyxdggzs.com/article/201610/305939.htm相同點(diǎn):都是表示時(shí)間的。
差異點(diǎn):
date 是表示系統的時(shí)間,假如在系統啟動(dòng)時(shí)沒(méi)有設置的話(huà),系統都會(huì )從1970年開(kāi)始。
hwclock是表示硬件的時(shí)間,如時(shí)鐘芯片或主芯片自帶的rtc里面的時(shí)間。
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)
應該說(shuō)解釋的很詳細了,但是-s與-w選項,我個(gè)人覺(jué)得解釋的會(huì )讓人誤解,可以這么理解
-s Set system time from hardware clock 從硬件時(shí)鐘讀取數據到系統時(shí)鐘,主要用于剛開(kāi)始時(shí),系統時(shí)鐘從硬件時(shí)鐘讀取時(shí)間信息,如果沒(méi)有這步,則系統時(shí)間就會(huì )為1970年了。
-w Set hardware clock to system time 把系統時(shí)鐘設置到硬件時(shí)鐘里面,主要用于設置硬件時(shí)鐘的時(shí)間,比如在使用busybox制作的根文件系統中,要設置時(shí)間有2個(gè)步驟:1,先使用date設置系統時(shí)間;2,再利用hwclock –w把當前系統時(shí)間寫(xiě)到硬件時(shí)鐘里面。如果沒(méi)有第二步,下次啟動(dòng)時(shí),系統時(shí)間是不會(huì )更新的。
可以看看下面例子:
# date
Thu Jan 1 12:10:11 UTC 1970
# hwclock
Thu Jan 1 12:10:13 1970 0.000000 seconds
時(shí)間是一致的(當然了秒不一樣,是我操作需要時(shí)間的原因)
用date 設置下時(shí)間
# 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
很明顯,時(shí)間又一致了。
然后,再來(lái)看下驅動(dòng)。
先把at91sam9263自帶的rtc配置上,啟動(dòng)的時(shí)候提示
rtc-at91sam9 at91_rtt.0: hctosys: unable to read the hardware clock
于是用hwclock來(lái)檢查,到底是哪里出了問(wèn)題
# hwclock
hwclock: can't open '/dev/misc/rtc': No such file or directory
沒(méi)有這個(gè)設備,需要建立一個(gè)
查看下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);
}
就會(huì )發(fā)現調用hwclock時(shí)做了3次嘗試,隨便你用/dev/rtc,/dev/rtc0,/dev/misc/rtc哪個(gè)設備都可以,若3個(gè)都沒(méi)有就會(huì )提示錯誤。
為了簡(jiǎn)單,以后就弄個(gè)/dev/rtc0
# mknod /dev/rtc0 c 254 0
再用hwclock 查看下
# hwclock
Thu Jan 1 00:05:41 1970 0.000000 seconds
就有了時(shí)間了。
如果時(shí)鐘芯片或主芯片自帶的時(shí)鐘格式有問(wèn)題的話(huà),會(huì )出現如下錯誤
# hwclock
hwclock: RTC_RD_TIME: Invalid or incomplete multibyte or wide character
這里就需要把系統的時(shí)間設置到時(shí)鐘芯片或主芯片自帶的rtc里面去,如下
#hwclock –w
然后rtc就可以用了。
評論