Linux下rtc驅動

來源:互聯網
上載者:User

Linux下rtc驅動
-
 

 

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

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

差異點:

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   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就可以用了。
 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.