免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 14855 | 回复: 4
打印 上一主题 下一主题

[应用] 【整理】linux下测试RTC驱动相关的命令date和hwclock常见用法简介 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-11-04 15:40 |只看该作者 |倒序浏览
【整理】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):
  1. # hwclock --help
  2. BusyBox v1.13.4 (2009-09-18 16:05:03 CST) multi-call binary
  3. Usage: hwclock [-r|--show] [-s|--hctosys] [-w|--systohc] [-l|--localtime] [-u|--utc] [-f FILE]
  4. Query and set hardware clock (RTC)
  5. Options:
  6.         -r      Show hardware clock time
  7.         -s      Set system time from hardware clock
  8.         -w      Set hardware clock to system time
  9.         -u      Hardware clock is in UTC
  10.         -l      Hardware clock is in local time
  11.         -f FILE Use specified device (e.g. /dev/rtc2)
复制代码
刚刚根据上面的解释,不知道别人如何,我是之前被-s和-w的解释搞晕了,也就后来用错了。。。。
所以,找了下,找到意思更清晰的,是man hwclock的解释,摘录相关部分如下:
  1. hwclock -r or hwclock --show
  2. hwclock -w or hwclock --systohc
  3. hwclock -s or hwclock --hctosys
  4. --show
  5. Read the Hardware Clock and print the time on Standard Output......
  6. --hctosys
  7. Set the System Time from the Hardware Clock......
  8. This is a good option to use in one of the system startup scripts.
  9. --systohc
  10. 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中的对应的代码如下:
  1. static const char *rtcname;
  2. static int xopen_rtc(int flags)
  3. {
  4. int rtc;
  5. if (!rtcname) {
  6.    rtc = open("/dev/rtc", flags);
  7.    if (rtc >= 0)
  8.     return rtc;
  9.    rtc = open("/dev/rtc0", flags);
  10.    if (rtc >= 0)
  11.     return rtc;
  12.    rtcname = "/dev/misc/rtc";
  13. }
  14. return xopen(rtcname, flags);
  15. }
复制代码
4. 在Linux中有硬件时钟与系统时钟等两种时钟。
硬件时钟是指主机板上的时钟设备,也就是通常可在BIOS画面设定的时钟,对于嵌入式开发,对应开发板上有对应的rtc模块。
系统时钟则是指kernel中的时钟。当Linux启动时,系统时钟会去读取硬件时钟的设定,之后系统时钟即独立运作。
所有Linux相关指令与函数都是读取系统时钟的设定。系统时钟的设定就是我们常用的date命令。
而我们写的RTC驱动就是为硬件时钟服务的,它有属于自己的命令hwclock。
因此,可以简单理解为,date命令操作Linux的系统(软件)时钟,hwclock命令操作硬件时钟(rtc模块)。
所以,对应地,我们要验证rtc驱动是否工作正常,只需要hwclock,
但往往又会涉及Linux的系统时钟和硬件时钟之间的同步等操作,所以,一般都是将date和hwclock一起搭配使用。
【用date和hwclock测试rtc驱动工作是否正常】
一般来说,最简单的测试rtc是否工作正常的步骤就是,在加载完rtc驱动后(或者本身驱动是已经编译进内核的):
1.显示当前Linux系统时间
  1. date
复制代码
[2].如果date时间也不正常,比如是1970年之类的,而不是我当前的时间,比如2009年,那么就自己手动设置一下正确时间
  1. date MMDDhhmm[[YY]YY][.ss]
复制代码
3.显示硬件rtc时间
  1. hwclock
复制代码

由于此处是rtc驱动第一次加载,还没设置正确的时间,所以此时显示的时间,多数是不正确的是1969,1970年。
4.将Linux系统时间设置到硬件rtc中
  1. hwclock -w
复制代码

5.再次查看硬件rtc时间是否和系统中的一致
  1. hwclcok
复制代码
如果驱动正确工作的话,此处显示的时间,就应该和你当前的系统时间一致了,也就是传说中的,时间同步了。。。
否则,就说明你驱动工作不正确,没有正确地把系统时间设置进入硬件rtc中,就要你自己回去调试驱动,找原因去。
6.等个几秒,再次输入:
  1. hwclock
复制代码
正常的话,会看到此处的时间,相对步骤5中显示的时间,增加了对应的那几秒
那就说明rtc正常工作了。
下面是我的示例:
  1. # date
  2. Wed Dec 31 17:01:25 MST 1969
  3. //我这里此处系统时间也不正常,所以,下面去重新设置Linux系统时间
  4. # date --help
  5. BusyBox v1.13.4 (2009-09-18 16:05:03 CST) multi-call binary
  6. Usage: date [OPTION]... [+FMT] [TIME]
  7. Display time (using +FMT), or set time
  8. Options:
  9.         -u              Work in UTC (don't convert to local time)
  10.         -R              Output RFC-822 compliant date string
  11.         -I[SPEC]        Output ISO-8601 compliant date string
  12.                         SPEC='date' (default) for date only,
  13.                         'hours', 'minutes', or 'seconds' for date and
  14.                         time to the indicated precision
  15.         -d TIME         Display TIME, not 'now'
  16.         -r FILE         Display last modification time of FILE
  17.         [-s] TIME       Set time to TIME
  18.         -D FMT          Use FMT for str->date conversion
  19. Recognized formats for TIME:
  20.         hh:mm[:ss]
  21.         [YYYY.]MM.DD-hh:mm[:ss]
  22.         YYYY-MM-DD hh:mm[:ss]
  23.         MMDDhhmm[[YY]YY][.ss]
  24. //设置的格式,上面提示的很清楚了,MM是月份,DD是日期,hh是小时,mm是分钟,年份可以写2位的YY或者4位的YYYY,秒可以用.ss表示
  25. # date 110313172009.05
  26. Tue Nov 3 13:17:05 MST 2009
  27. # hwclock -w
  28. # hwclock
  29. Tue Nov 3 13:18:33 2009 0.000000 seconds
  30. # hwclock
  31. Tue Nov 3 13:18:41 2009 0.000000 seconds
复制代码

当然,知道了具体用法后,你可以再次去试试其他的,比如将硬件hwclock里面的时间设置了,
用hwclock -s把rtc时间写到Linux系统时间里面去。
【小提示】
为了使系统时间和RTC时间同步,而不用等待Linux系统启动后,要麻烦地,每次都这样输入命令去同步Linux系统时间和硬件RTC的时间,
可以在初始化文件中添加命令hwclock –s,使每次开机时读取硬件RTC时间,并同步给Linux系统时间。
具体方法是:
在etc/init.d/rcS(旧版本的,应该是/etc/inittab)中添加
  1. /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]


[ 本帖最后由 crifan 于 2009-11-5 10:46 编辑 ]

评分

参与人数 1可用积分 +30 收起 理由
T-Bagwell + 30 原创内容

查看全部评分

论坛徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
2 [报告]
发表于 2009-11-04 15:50 |只看该作者
如果楼主排排版就更好了
命令和代码用code代码包起来可能更好些

论坛徽章:
0
3 [报告]
发表于 2009-11-04 16:19 |只看该作者

回复 #2 T-Bagwell 的帖子

刚试了,点击 C++ 那个按钮,结果弹出一个小型的窗口,里面不是之前的可以加入的代码的剪贴板了,而是显示网页内容。。。
等系统OK了,再用那个按钮,整理代码吧。。。

简单编辑了一下,代码单独添加了。
不过,bbs发帖系统还是有毛病,代码里面注释修改了颜色,当时显示是对的,发布后就没了。。。

[ 本帖最后由 crifan 于 2009-11-5 10:47 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2009-11-13 19:00 |只看该作者
论坛也要跟进时代哟,

论坛徽章:
16
2015亚冠之吉达阿赫利
日期:2015-08-17 11:21:462015年迎新春徽章
日期:2015-03-04 09:58:11酉鸡
日期:2014-12-07 09:06:19水瓶座
日期:2014-11-04 14:23:29天秤座
日期:2014-03-02 08:57:52双鱼座
日期:2014-02-22 13:07:56午马
日期:2014-02-14 11:08:18双鱼座
日期:2014-02-13 11:09:37卯兔
日期:2014-02-06 15:10:34子鼠
日期:2014-01-20 14:48:19戌狗
日期:2013-12-19 09:37:46射手座
日期:2013-12-19 09:33:47
5 [报告]
发表于 2011-05-27 20:13 |只看该作者
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP