首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

linux RTC测试

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与-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就可以用了。
返回列表