免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1865 | 回复: 0

RTC驱动在FL2440的移植(2.6.33.7内核) [复制链接]

论坛徽章:
0
发表于 2011-12-20 09:44 |显示全部楼层
一、移植环境
    主  机:Fedora 14 (kernel-2.6.33.7)
    开发板:FL2440(nandflash:K9F1G08 128MB)
    编译器:arm-linux-gcc-4.3.2
 
二、移植步骤
  1. 开发板上电后从系统启动信息可以发现,系统不能正常加载rtc驱动打开rtc设备。
  1. No device for DAI UDA134X
  2. No device for DAI s3c24xx-i2s
  3. ALSA device list:
  4.   No soundcards found.
  5. TCP cubic registered
  6. NET: Registered protocol family 17
  7. drivers/rtc/hctosys.c: unable to open rtc device (rtc0)
  2. 开机进入控制台后,查看有没有添加对RTC时钟支持的系统。系统启动后运行#date命令显示的是原始时间:1970年1月1日。
  1. # date
  2. Thu Jan 1 00:17:00 UTC 1970
  3. 修改内核代码,添加对RTC时钟的支持,2.6.33.7内核对RTC的驱动支持已经非常完善了,我们只需要把他添加到设备初始化列表中即可。
  1. #vim arch/arm/mach-s3c2440/mach-smdk2440.c

  2. static struct platform_device *smdk2440_devices[] __initdata = {
  3.         &s3c_device_usb,
  4.         &s3c_device_lcd,
  5.         &s3c_device_wdt,
  6.         &s3c_device_i2c0,
  7.         &s3c_device_iis,
  8.         &s3c_device_rtc, //新增RTC设备
  9. };
  4. 配置内核选项对RTC的支持。
  1. Device Drivers --->
  2.     <*> Real Time Clock --->
  3.         [*] Set system time from RTC on startup and resume
  4.         (rtc0) RTC used to set the system time
  5.         [*] /sys/class/rtc/rtcN (sysfs)
  6.         [*] /proc/driver/rtc (procfs for rtc0)
  7.         [*] /dev/rtcN (character devices)
  8.         <*> Samsung S3C series SoC RTC
  5. 重新编译内核后下载到开发板上测试。从系统启动信息可以看出RTC设备仍然未正常工作,系统启动后运行#date命令显示的还是1970的那个原始时间。而运行hwclock命令的时候出错。
  1. No device for DAI UDA134X
  2. No device for DAI s3c24xx-i2s
  3. ALSA device list:
  4.   No soundcards found.
  5. TCP cubic registered
  6. NET: Registered protocol family 17
  7. drivers/rtc/hctosys.c: unable to open rtc device (rtc0)
  8. # date
  9. Thu Jan 1 00:17:00 UTC 1970
  10. #hwclock
  11. hwclock: can't open '/dev/misc/rtc
  这时我想尽办,到论坛、Q群上问别人也没解决,在/dev目录下建立rtc、rtc0也不起作用。关键的时候突发奇想,想想会不会跟2410的配置有关呢,于是修改了mach-smdk2410.c同样把rtc加入到初始化列表,没想到真的起作用!
  1. #vim arch/arm/mach-s3c2410/mach-smdk2410.c

  2. static struct platform_device *smdk2410_devices[] __initdata = {
  3.         &s3c_device_usb,
  4.         &s3c_device_lcd,
  5.         &s3c_device_wdt,
  6.         &s3c_device_i2c0,
  7.         &s3c_device_iis,
  8.         &s3c_device_rtc,    //新增RTC设备
  9. };
  6. 重新编译内核后下载到开发板上测试。从系统启动信息终于可以看出RTC设备正常工作,系统启动后运行#date命令显示的就是当前正确的时间。
  1. s3c2410-rtc s3c2410-rtc: rtc disabled, re-enabling
  2. s3c2410-rtc s3c2410-rtc: rtc core: registered s3c as rtc0
  3. S3C2410 Watchdog Timer, (c) 2004 Simtec Electronics
  4. s3c2410-wdt s3c2410-wdt: watchdog inactive, reset disabled, irq enabled
  5. usbcore: registered new interface driver hiddev
  6. usbcore: registered new interface driver usbhid
  7. usbhid: USB HID core driver
  8. No device for DAI UDA134X
  9. No device for DAI s3c24xx-i2s
  10. ALSA device list:
  11.   No soundcards found.
  12. TCP cubic registered
  13. NET: Registered protocol family 17
  14. 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了!
  1. #mknod /dev/rtc/ c 254 0
  2. #date
  3. Thu Jan 1 00:19:00 UTC 1970
  4. #date -s 012615212011
  5. Wed Jan 26 15:21:00 UTC 2011
  6. #hwclock -w
  7. ...............(重启)
  8. #date
  9. Wed Jan 26 15:22:43 UTC 2011


2011-01-26

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP