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!

问题最终解决了。


9260 linux RTC驱动问题修正

 sbc9260 RTC设置问题修正问题描述:用date命令设置系统时间[root@sbc9260 /]# date 042208092009.30Wed Apr 22 08:09:30 EDT 20...
  • xuwukong
  • xuwukong
  • 2009年04月24日 22:57
  • 1558

Linux rtc驱动模块分析

内核版本:linux-2.6.32
  • mcgrady_tracy
  • mcgrady_tracy
  • 2014年09月03日 14:49
  • 4157

linux rtc驱动

Linux的RTC驱动相对还是比较简单的,可以将它作为一个普通的字符型设备,或者一个misc设备,也可以是一个平台设备,这都没有关系,主要还是对rtc_ops这个文件操作结构体中的成员填充,这里主要涉...
  • sunstars2009918
  • sunstars2009918
  • 2014年02月25日 17:15
  • 888

Linux RTC驱动模型分析

RTC简介 RTC(real-time clock)简称实时时钟,主要作用是用来记时,产生闹钟等。RTC因为有备份电池,所以即使计算机关机掉电,也不会影响RTC记时。而RTC和系统时间(主要靠软件模拟...
  • longwang155069
  • longwang155069
  • 2016年08月26日 20:16
  • 1681

RTEMS 的 AT91SAM9260 移植(4): 中断驱动

中断驱动AT91rm9200和AT9260差别不大,主要要修改的地方是个别的中断向量号,另外就是最大中断向量号。我所作的修改:c/src/lib/libcpu/arm/at91sam9260/irq/...
  • coolbacon
  • coolbacon
  • 2010年12月24日 22:30
  • 3883

linux下如何写RTC驱动

============================================ 作者:yuanlulu http://blog.csdn.net/yuanlulu 版权没有,但是转...
  • yuanlulu
  • yuanlulu
  • 2011年05月19日 17:22
  • 3060

linux驱动基础系列--linux rtc子系统

前言   linux驱动子系统太多了,连时钟也搞了个子系统,这导致一般的时钟芯片的驱动也会涉及到至少2个子系统,一个是时钟芯片接口子系统(比如I2c接口的时钟芯片),一个是内核给所有时钟芯片提供的r...
  • yuzeze
  • yuzeze
  • 2016年04月19日 09:38
  • 1184

AT91SAM9260硬件时钟RTC的使用

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

RTC驱动模型分析

①RTC设备层: 设备资源的定义:arch/arm/plat-s3c24xx/devs.c static struct resource s3c_rtc_resource[] = { [0] =...
  • u011549260
  • u011549260
  • 2015年04月21日 08:24
  • 773

Linux开发十_rtc驱动

rtc为操作系统提供时钟、日历、闹钟、周期性中断等功能,并且在断电的情况下,可以由电池供电,以很小的耗电继续运行下去,Linux内核已经支持s3c2416的rtc驱动。...
  • huang20083200056
  • huang20083200056
  • 2017年04月23日 01:00
  • 227
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:9260 linux RTC驱动问题修正
举报原因:
原因补充:

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