9260 linux RTC驱动问题修正

转载 2012年03月23日 15:20:08

原帖地址:http://blog.csdn.net/xuwukong/article/details/4113812


sbc9260 RTC设置问题修正

问题描述:

用date命令设置系统时间

[root@sbc9260 /]# date 042208092009.30

Wed Apr 22 08:09:30 EDT 2009

用hwclock –w将系统时间写到RTC中,更新RTC时钟为系统时钟

[root@sbc9260 /]# hwclock –w

断电重启板子,用date命令设置系统时间

[root@sbc9260 /]# date

Wed Apr 22 04:10:31 EDT 2009

发现系统时间和设置的相差了4个小时。

 

刚开始怀疑在执行hwclock –w设置RTC时钟的时候有问题,可能用户输入的时间和实际设置的时间不同,为了查看设置RTC时钟的情况,将设置过程用Printk打印出来。

[root@sbc9260 /]# date 042208092009.30

Wed Apr 22 08:09:30 EDT 2009

[root@sbc9260 /]# hwclock -w

set to register[before BIN2BCD]

secs=45, mins=9, hours=8, mday=22, mon=3, year=109, wday=3

set to register[after BIN2BCD]

%raw data is st1=00, st2=00, sec=45, min=09, hr=08, mday=22, wday=03, mon=04, year=09

查看输入信息,发现设置数据没有错误,不过这只是证明在设置RTC时钟的时候,传送给RTC的数据正确送达了RTC的数据缓冲区,是不是正确写入了RTC内部的寄存器还未知。

断电重启,执行hwclock –r.

确认将用户输入输入正确写入了RTC寄存器。

RTC正确地保存了断电以前设置的时间,而系统时间又不对,说明系统重启后没有成功执行hwclock –s,将系统时间更新为RTC时间。那么手动输入hwclock –s 命令后系统时间和RTC时间应该一致了。输入hwclock –s后,再执行date,果然系统时间和RTC对上了。

跌跌撞撞到这里,想起来还没有了解RTC时间和系统时间时怎样同步的,汗。

内事问百度,外事问谷歌,前辈们说的。

Google之后,对RTC和系统时间的大致关系了解如下。

1.      系统启动后会读取RTC中的时间,来更新系统时间。

2.      系统时间,RTC时间独立运行。

3.      .每隔660s,系统检查是否需要将系统时间保存到RTC中。

4.      系统关闭时,将系统时间保存到RTC中,更新RTC时间

如此说来,系统在启动时应该会自动执行hwclock –s命令,应该在某个启动脚本里,最终在/etc/rc.sysinit shell脚本中找到如下内容

If [-f “/dev/rtc”];then

/sbin/hwclock –s

Fi

这段程序的意思,若存在/dev/rtc文件,则执行hwclcok –s 命令,而实际是没有执行hwclock –s命令,也就是说if为假,不存在/dev/rtc文件,再/dev目录下执行ls –l,

lrwxrwxrwx    1 root     root            4 Apr 22 06:21 rtc -> rtc0

crw-------    1 root     root     254,   0 Apr 22 06:21 rtc0

该文件确实存在,到此又迷糊了,明明存在,怎么判断不存在呢,先不管了,加上#屏蔽判断

#If [-f “/dev/rtc”];then

/sbin/hwclock –s

#Fi

重新编译根文件系统,烧录,重启,用date设置时间,再重启,再执行date命令。

系统时间和RTC时间一致了!

到此问题似乎解决了,但是前提是/dev/rtc是始终存在的,是想当然的认为/dev/rtc是一定存在的,感觉不够严谨,因为对shell语言不熟悉,找了shell的文章,在test章节发现如下内容。

test –e File                                           文件存在

test –f File                                            文件存在并且是普通文件

那么设备文件应该不是普通文件,应该是-e才对,将-f改为-e,去掉if屏蔽。

Game over!

问题最终解决了。


相关文章推荐

Linux arm9260 ADC驱动程序

Linux ARM9260 ADC驱动编程 #include   #include   #include   #include   #include   #include   #in...

DS18B20 linux驱动程序 基于AT91SAM9260

调试了很久的DS18B20驱动,前些日子出现的问题一直是读出为0 ,卡了4天之后终于解决了,之前在控制口没有加上拉电阻,后来想到可能是这个问题,加了个大电阻,果然好了~#include #includ...

linux RTC驱动资料

  • 2011年12月25日 10:58
  • 622KB
  • 下载

linux系统下rtc驱动

  • 2016年04月15日 16:30
  • 4KB
  • 下载

AT91SAM9260硬件时钟RTC的使用

一、硬件要求 (1)AT91SAM9260平台 (2)时钟芯片:Rx8025  SA/NB (3)接口:通过I2C总线读取,两条总线为PA23、PA24。 二、配置内核 进入内核根目录下,运行配置菜单...

【引用】Linux-2.6.32.2内核在mini2440上的移植(五)---激活RTC驱动

移植环境(红色粗字体字为修改后内容,蓝色粗体字为特别注意内容) 1,主机环境:VMare下CentOS 5.5 ,1G内存。 2,集成开发环境:Elipse IDE 3,编译编译环境:arm-l...

linux 实时时钟(RTC)驱动

这个是linux内核文档关于rtc实时时钟部分的说明,此文档主要描述了rtc实时时钟的作用和编程接口,分别介绍了老的rtc接口和新的rtc类架构。并给出了一个测试rtc驱动的程序。     linu...

Zynq平台下linux的I2C驱动(RTC+EEPROM)

现在ARM下对SoC开发板的硬件描述都是采用devicetree文件,使用linux自带的dtc程序将dts编译成dtb之后,由u-boot将dtb导入给linux内核,linux内核读取dtb,然后...

Linux 关于MCP7940 RTC驱动(MT7620芯片)

Linux 关于MCP7940 RTC驱动(MT7620芯片,RTC驱动) 一、硬件平台 1、 控制器:MT7620(A9内核) 2、 RTC芯片:MCP7940...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:9260 linux RTC驱动问题修正
举报原因:
原因补充:

(最多只允许输入30个字)