一、移植环境 主 机:Fedora 14 (kernel-2.6.33.7) 开发板:FL2440(nandflash:K9F1G08 128MB) 编译器:arm-linux-gcc-4.3.2 二、移植步骤 1. 开发板上电后从系统启动信息可以发现,系统不能正常加载rtc驱动打开rtc设备。 - No device for DAI UDA134X
-
No device for DAI s3c24xx-i2s
-
ALSA device list:
-
No soundcards found.
-
TCP cubic registered
-
NET: Registered protocol family 17
-
drivers/rtc/hctosys.c: unable to open rtc device (rtc0)
2. 开机进入控制台后,查看有没有添加对RTC时钟支持的系统。系统启动后运行#date命令显示的是原始时间:1970年1月1日。 - # date
-
Thu Jan 1 00:17:00 UTC 1970
3. 修改内核代码,添加对RTC时钟的支持,2.6.33.7内核对RTC的驱动支持已经非常完善了,我们只需要把他添加到设备初始化列表中即可。 - #vim arch/arm/mach-s3c2440/mach-smdk2440.c
- static struct platform_device *smdk2440_devices[] __initdata = {
- &s3c_device_usb,
- &s3c_device_lcd,
- &s3c_device_wdt,
- &s3c_device_i2c0,
- &s3c_device_iis,
- &s3c_device_rtc, //新增RTC设备
- };
- Device Drivers --->
-
<*> Real Time Clock --->
-
[*] Set system time from RTC on startup and resume
-
(rtc0) RTC used to set the system time
-
[*] /sys/class/rtc/rtcN (sysfs)
-
[*] /proc/driver/rtc (procfs for rtc0)
-
[*] /dev/rtcN (character devices)
-
<*> Samsung S3C series SoC RTC
5. 重新编译内核后下载到开发板上测试。从系统启动信息可以看出RTC设备仍然未正常工作,系统启动后运行#date命令显示的还是1970的那个原始时间。而运行hwclock命令的时候出错。 - No device for DAI UDA134X
- No device for DAI s3c24xx-i2s
- ALSA device list:
- No soundcards found.
- TCP cubic registered
- NET: Registered protocol family 17
- drivers/rtc/hctosys.c: unable to open rtc device (rtc0)
- # date
- Thu Jan 1 00:17:00 UTC 1970
- #hwclock
- hwclock: can't open '/dev/misc/rtc
这时我想尽办,到论坛、Q群上问别人也没解决,在/dev目录下建立rtc、rtc0也不起作用。关键的时候突发奇想,想想会不会跟2410的配置有关呢,于是修改了mach-smdk2410.c同样把rtc加入到初始化列表,没想到真的起作用! -
#vim arch/arm/mach-s3c2410/mach-smdk2410.c
-
-
static struct platform_device *smdk2410_devices[] __initdata = {
-
&s3c_device_usb,
-
&s3c_device_lcd,
-
&s3c_device_wdt,
-
&s3c_device_i2c0,
-
&s3c_device_iis,
-
&s3c_device_rtc, //新增RTC设备
-
};
6. 重新编译内核后下载到开发板上测试。从系统启动信息终于可以看出RTC设备正常工作,系统启动后运行#date命令显示的就是当前正确的时间。 - s3c2410-rtc s3c2410-rtc: rtc disabled, re-enabling
-
s3c2410-rtc s3c2410-rtc: rtc core: registered s3c as rtc0
-
S3C2410 Watchdog Timer, (c) 2004 Simtec Electronics
-
s3c2410-wdt s3c2410-wdt: watchdog inactive, reset disabled, irq enabled
-
usbcore: registered new interface driver hiddev
-
usbcore: registered new interface driver usbhid
-
usbhid: USB HID core driver
-
No device for DAI UDA134X
-
No device for DAI s3c24xx-i2s
-
ALSA device list:
-
No soundcards found.
-
TCP cubic registered
-
NET: Registered protocol family 17
-
s3c2410-rtc s3c2410-rtc: setting system clock to 2011-01-26 15:00:00 UTC (1296054000)。(这是我设置时间后的显示的时间)
7. 使用命令:date -s 设置时间后用hwclock -w保存到RTC设备中,但是这里出错了,说找不到文件或目录,这是为什么呢?这是因为我们还没有在dev中添加RTC设备节点。我们先查看该设备的主设备号是多少?执行命令:#cat /proc/devices 可以看到rtc的主设备号是254。创建节点,再次设置时间和保存,重启后查看时间,OK了! - #mknod /dev/rtc/ c 254 0
-
#date
-
Thu Jan 1 00:19:00 UTC 1970
-
#date -s 012615212011
-
Wed Jan 26 15:21:00 UTC 2011
-
#hwclock -w
-
...............(重启)
-
#date
-
Wed Jan 26 15:22:43 UTC 2011
2011-01-26
|