linux下测试RTC驱动相关的命令date和hwclock常见用法简介
之前對Linux下面時間相關的內容,一無所知,第一次見到hwclock,不知為何物,也沒找到解釋清楚的帖子。故此整理一下,簡單介紹Linux下驗證rtc驅動是否工作正常,相關的的命令:date和hwclock。
先說明:
1.本貼主要內容來整理自后注所引用的帖子。
2.如下介紹,不涉及如何編寫rtc驅動,只簡單介紹,驅動實現后,如果通過date和hwclock去驗證rtc驅動是否正常工作。
1.date,Linux中用于顯示/修改系統時間的一個命令。
2.Linux的RTC驅動實現完了后,一般是默認的是一個普通的字符型設備,或者一個misc設備,也可以是一個平臺設備。
對應地,如果insomod驅動后,或者build-in到kernel后,對應的設備一般是
/dev/rtc 或 /dev/rtc0 或者 /dev/misc/rtc
3.hwclock,見名知意,hw clock, hardware clock,硬件(RTC)時鐘。
對于hwclock,看看具體什么用途和用法(此處是嵌入式開發中用到的用busybox中的hwclock):
# hwclock --help
BusyBox v1.13.4 (2009-09-18 16:05:03 CST) multi-call binary
Usage: hwclock [-r|--show] [-s|--hctosys] [-w|--systohc] [-l|--localtime] [-u|--utc] [-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的解釋搞暈了,也就后來用錯了。。。。
所以,找了下,找到意思更清晰的,是man hwclock的解釋,摘錄相關部分如下:
hwclock -r or hwclock --show
hwclock -w or hwclock --systohc
hwclock -s or hwclock --hctosys
--show
Read the Hardware Clock and print the time on Standard Output......
--hctosys
Set the System Time from the Hardware Clock......
This is a good option to use in one of the system startup scripts.
--systohc
Set the Hardware Clock to the current System Time.
上面的解釋就很清楚了,用中文解釋為:
hwclock –r??????? show, 顯示硬件時鐘, 等價于不加參數的hwclock。
hwclock –s??????? hctosys,hardware clock to system, 將“硬件時鐘”RTC的時間寫到Linux“系統”時鐘里。
hwclock –w??????? systohc,system to hardware clock ,將“系統”時鐘寫到“硬件時鐘”RTC里面。
運行hwclock,會自動去尋找對應的rtc設備,然后執行對應的操作。
網上所找到的,busybox中的對應的代碼如下:
2
3 static int xopen_rtc(int flags)
4 {
5 int rtc;
6
7 if (!rtcname) {
8 rtc = open("/dev/rtc", flags);
9 if (rtc >= 0)
10 return rtc;
11 rtc = open("/dev/rtc0", flags);
12 if (rtc >= 0)
13 return rtc;
14 rtcname = "/dev/misc/rtc";
15 }
16 return xopen(rtcname, flags);
17 }
4. 在Linux中有硬件時鐘與系統時鐘等兩種時鐘。
硬件時鐘是指主機板上的時鐘設備,也就是通常可在BIOS畫面設定的時鐘,對于嵌入式開發,對應開發板上有對應的rtc模塊。
系統時鐘則是指kernel中的時鐘。當Linux啟動時,系統時鐘會去讀取硬件時鐘的設定,之后系統時鐘即獨立運作。
所有Linux相關指令與函數都是讀取系統時鐘的設定。系統時鐘的設定就是我們常用的date命令。
而我們寫的RTC驅動就是為硬件時鐘服務的,它有屬于自己的命令hwclock。
因此,可以簡單理解為,date命令操作Linux的系統(軟件)時鐘,hwclock命令操作硬件時鐘(rtc模塊)。
所以,對應地,我們要驗證rtc驅動是否工作正常,只需要hwclock,
但往往又會涉及Linux的系統時鐘和硬件時鐘之間的同步等操作,所以,一般都是將date和hwclock一起搭配使用。
一般來說,最簡單的測試rtc是否工作正常的步驟就是,在加載完rtc驅動后(或者本身驅動是已經編譯進內核的):
1.顯示當前Linux系統時間
[2].如果date時間也不正常,比如是1970年之類的,而不是我當前的時間,比如2009年,那么就自己手動設置一下正確時間
3.顯示硬件rtc時間
由于此處是rtc驅動第一次加載,還沒設置正確的時間,所以此時顯示的時間,多數是不正確的是1969,1970年。
4.將Linux系統時間設置到硬件rtc中
5.再次查看硬件rtc時間是否和系統中的一致
如果驅動正確工作的話,此處顯示的時間,就應該和你當前的系統時間一致了,也就是傳說中的,時間同步了。。。
否則,就說明你驅動工作不正確,沒有正確地把系統時間設置進入硬件rtc中,就要你自己回去調試驅動,找原因去。
6.等個幾秒,再次輸入:
正常的話,會看到此處的時間,相對步驟5中顯示的時間,增加了對應的那幾秒
那就說明rtc正常工作了。
下面是我的示例:
當然,知道了具體用法后,你可以再次去試試其他的,比如將硬件hwclock里面的時間設置了,
用hwclock -s把rtc時間寫到Linux系統時間里面去。
為了使系統時間和RTC時間同步,而不用等待Linux系統啟動后,要麻煩地,每次都這樣輸入命令去同步Linux系統時間和硬件RTC的時間,
可以在初始化文件中添加命令hwclock –s,使每次開機時讀取硬件RTC時間,并同步給Linux系統時間。
具體方法是:
在etc/init.d/rcS(舊版本的,應該是/etc/inittab)中添加
/bin/hwclock -s
即可。
【資料引用】
1.關于linux的RTC驅動
http://blog.csdn.net/myleeming/archive/2008/11/05/3228154.aspx
2.RTC\date
http://hi.baidu.com/grdd/blog/item/554c2b3f11d612e455e7234a.html
3.關于rtc的問題?
http://www.linuxforum.net/forum/showflat.php?Board=embedded&Number=725797
4.hwclock( - Linux man page
[url=http://linux.die.net/man/8/hwclock]http://linux.die.net/man/8/hwclock[/url]
http://linux.chinaunix.net/bbs/thread-1142520-1-1.html
總結
以上是生活随笔為你收集整理的linux下测试RTC驱动相关的命令date和hwclock常见用法简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mnesia数据库学习笔记四
- 下一篇: W3C api 抓取