新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > linux RTC測試

        linux RTC測試

        作者: 時間:2016-10-08 來源:網絡 收藏

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

        本文引用地址:http://www.104case.com/article/201610/305939.htm

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

        差異點:

        date 是表示系統的時間,假如在系統啟動時沒有設置的話,系統都會從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 從硬件時鐘讀取數據到系統時鐘,主要用于剛開始時,系統時鐘從硬件時鐘讀取時間信息,如果沒有這步,則系統時間就會為1970年了。

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

        可以看看下面例子:

        # 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

        很明顯,時間又一致了。

        然后,再來看下驅動。

        先把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);

        }

        就會發現調用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

        就有了時間了。

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

        # hwclock

        hwclock: RTC_RD_TIME: Invalid or incomplete multibyte or wide character

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

        #hwclock –w

        然后rtc就可以用了。



        關鍵詞:

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 武义县| 新乐市| 宁德市| 扎兰屯市| 锦州市| 繁昌县| 石河子市| 淮北市| 新密市| 额济纳旗| 古田县| 修武县| 盐边县| 玛曲县| 原平市| 阿城市| 南平市| 如东县| 郸城县| 漳浦县| 东丰县| 定襄县| 泾源县| 阆中市| 阳春市| 栖霞市| 昌黎县| 麻栗坡县| 武汉市| 萍乡市| 平陆县| 禹州市| 深泽县| 嵊州市| 沁源县| 抚州市| 茂名市| 富平县| 闻喜县| 南通市| 舞阳县|