移植linux2.6.35到s3c2416遇到drivers/rtc/hctosys.c: unable to open rtc device (rtc0) 错误提示。


网上搜索找到了解决办法,如下:
解决办法:
从启动信息可以看出没有加载成功 RTC 驱动!
TCP cubic registered

NET: Registered protocol family 1

RPC: Registered udp transport module.

RPC: Registered tcp transport module.

drivers/rtc/hctosys.c: unable to open rtc device (rtc0)

IP-Config: Complete:

      device=eth0, addr=192.168.1.230, mask=255.255.255.0, gw=192.168.1.1,

     host=www, domain=, nis-domain=kevin.com,

     bootserver=192.168.1.90, rootserver=192.168.1.90, rootpath=

Looking up port of RPC 100003/2 on 192.168.1.90
s3c2416 的 RTC 已经在 2.6.35 kernel 中,但是没有加入 smdk2416  targetboard ,

所以我们只需要将 RTC 加入初始化的设备列表中。
1.       menu config 中 RTC 部分使用默认设置。
2.       修改文件 mach-smdk2416 .c ( /linux2.6.35.6/arch/arm/mach-s3c2416/mach-smdk2416 .c ),在数组 smdk2416 _devices[] 中添加 &s3c_device_rtc.
3.       在 /dev 目录下创建 rtc 设备文件 rtc.
            mknod rtc c 10 135
4.       重新编译内核。看看启动信息。
            ……
            S3C24XX RTC, (c) 2004,2006 Simtec Electronics
            s3c2410-rtc s3c2410-rtc: rtc disabled, re-enabling
            s3c2410-rtc s3c2410-rtc: rtc core: registered s3c as rtc0
           ……
            以上信息说明 RTC 设备已经加入内核了。
             完事。
错误提示:hwclock: settimeofday() failed: Invalid argument
以上信息说明可能还没有设置 RTC 时间, RTC 初始时间为 Wed Dec 31 23:59:59 1969 。从内核函数 int rtc_valid_tm(struct rtc_time *tm) ,可以看出,当 year 小于 1970 时,认为是时间 invalid ,函数返回 -EINVAL下面来验证一下这个想法 J

[username@smdk2416]# 
[username@smdk2416]# hwclock
Wed Dec 31 23:59:59 1969 0.000000 seconds
[username@smdk2416]# date
Wed Jul 30 20:34:09 UTC 1975
系统时间是通过 date 来设置的, RTC 时间是通过 hwclock 来设置的。开机时系统时间首先通过 RTC 来获得,RTC没有设置时,系统时间也会使用Wed Dec 31 23:59:59 1969。
[root@ltls /]# hwclock --help
BusyBox v1.9.2 (2008-04-01 21:32:34 CST) multi-call binary
Usage: hwclock [-r|--show] [-s|--hctosys] [-w|--systohc] [-l|--localtime] [-u|--utc] [-f FILE]
Query and set a hardware clock (RTC)
Options:


            -r       Read hardware clock and print result


            -s      Set the system time from the hardware clock


            -w      Set the hardware clock to the system time


            -u      The hardware clock is kept in coordinated universal time


            -l       The hardware clock is kept in local time


            -f FILE      Use the specified clock (e.g. /dev/rtc2)


[root@ltls /]# hwclock -s
hwclock: settimeofday() failed: Invalid argument
[root@ltls /]# hwclock -w
s3c2410-rtc s3c2410-rtc: rtc only supports 100 years
hwclock: RTC_SET_TIME: Invalid argument
以上错误信息都是因为 year 设置不当引起的。没有设置 RTC , RTC 也不会启动计时。
下面首先设置正确的系统时间,然后将系统时间传递给 RTC 。
[root@ltls /]# date 040612282008.20
Sun Apr 6 12:28:20 UTC 2008
[root@ltls /]# hwclock -w
[root@ltls /]# hwclock
Sun Apr 6 12:29:01 2008 0.000000 seconds
[root@ltls /]# hwclock
Sun Apr 6 12:30:15 2008 0.000000 seconds
Ok , RTC 开始工作了!

为了使系统时间和 RTC 时间同步,可以在初始化文件中添加命令 
Hwclock –s

使每次开机时读取 RTC 时间,并同步给系统时间。


在 etc/init.d/rcS 中添加 
#+kevin080305


/bin/hwclock -s

原文地址:http://blog.csdn.net/xiaoweige207/article/details/6927022

以上是转载的内容,对于ok6410,按照他的方法进行解决:

===============================================================================================================================

查看/arch/arm/mach-smdk6410:

&s3c64xx_device_ac97,
&s3c_device_adc,
&gpio_button_device,
&s3c_device_ts,
&s3c_device_rtc,
&s3c_device_fimc0,
&s3c_device_fimc1,
&s3c_device_tvenc,
&s3c_device_tvscaler,

ok6410的rtc注册了,怎么出现这种错误……

=================================================================================================================================

设置一下时间试试:

(1) date 042916352007 #设置时间为 2007-04-29 16:34 
(2) hwclock -w #把刚刚设置的时间存入 S3C2440内部的 RTC 
(3).开机时使用  hwclock -s  命令可以恢复linux系统时钟为RTC,  一般把该语句放入
/etc/init.d/rcS  文件自动执行。 

结果成功:s3c-rtc s3c64xx-rtc: setting system clock to 2007-04-29 16:35:33 UTC (1177864533)

第一次启动的内核没有设置过时间就会出现这种问题!

Logo

更多推荐