免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234下一页
最近访问板块 发新帖
查看: 14791 | 回复: 34

rtc驱动的编写 [复制链接]

论坛徽章:
0
发表于 2008-08-22 12:52 |显示全部楼层
老师给布置一个任务,叫我在ARM9上实现一个RTC驱动
内核,板子都给我,映射搭载也成功了
问题来了,我不知道该从什么哪里下手开始做这个工作啊,感觉应该先编写驱动程序,可是这个程序应该写在哪个文件夹下面,又该如何加载进内核等一系统问题都很模糊
驱动运行过趁的大致概念明白,但一具体到某个方面就发现下手很困难
麻烦高手指点下,自己开发一个驱动.需要做哪些方面的研究和该如何进行这个步骤,谢谢!

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
发表于 2008-08-22 13:08 |显示全部楼层

回复 #1 yyykkk1229 的帖子

先搞明白什么叫RTC,ARM中的RTC到底是做什么的,怎么工作的?
然后再参考一下开源的RTC代码针对性的解决你的问题。

论坛徽章:
0
发表于 2008-08-22 13:20 |显示全部楼层
RTC=real time clock 型号是RX-8025 toolchains看了一下,实现3点功能即可,读时间,写时间,切换12/24状态
我现在是不知道从哪里开始做这些工作...有些晕...我在/drivers/char创建了.C文件,然后就不知道该怎么办了...思路很混乱...

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
发表于 2008-08-22 13:32 |显示全部楼层

回复 #3 yyykkk1229 的帖子

你仔细想一想,实际上就跟你写其他驱动是一樣的。该怎么写还怎么写,并没有什么特别的。

论坛徽章:
0
发表于 2008-08-22 14:26 |显示全部楼层
1.先写关于ARM9芯片的寄存器读写的api接口,这样统一并且方便其他驱动程序调用;
2.看型号这是颗片外的RTC芯片吧,这样还需要串口总线的驱动,负责读写RTC芯片的数据,一般都是I2C的居多,如果随板的套件 里没有的话(问问老师,既然让写RTC的驱动,I2C部分不是重点应该被忽略掉,要是也没有就T_T吧),就需要自己实现了,要么用I/O模拟,要么使用ARM上的I2C硬件寄存器接口,也是需要整出一个读写RTC寄存器的api接口;
3.最后是RTC的驱动部分,结合你的需求(读,写,设置时间)和驱动程序的框架,定义一个file_operations的结构。读和写的部分可以单独使用一个接口,也可以放在ioctl里使用命令完成读写的功能;设置时间的显示12/24制就需要使用ioctl了,转换12/24的状态,这部分一般在RTC的datasheet中也介绍,没有的话就只好人工手动实现转换了;
static struct file_operations rtc_fops = {
        owner:          THIS_MODULE,
        read:           rtc_read,
        write:          rtc_write,
        ioctl:          rtc_ioctl,
        open:           rtc_open,
        release:        rtc_release,
};

4.检验。编译后,使用insmod加载,然后用hwclock -r 命令读取硬件RTC的时间看是否成功;成功的话,再用date和hwclock -s 和 -w选项(具体其他选项的使用看hwclock --help)将系统时间设置到RTC,然后再测试将RTC时间设置到系统,看是否可以成功转换;
5.交作业。
供参考.

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
发表于 2008-08-22 14:39 |显示全部楼层

回复 #5 蓝豆 的帖子

还是蓝豆兄回答比较专业

论坛徽章:
0
发表于 2008-08-22 15:02 |显示全部楼层

回复 #5 蓝豆 的帖子

非常感谢蓝豆先生,大致的过程我也想的差不多了,您说的第2步老师已经将I2C总线的部分忽略掉了,主要是对功能性的实践操作
您说的第一步我还是不理解,我并不是用串口跟板子连接的,我用网络IP对板子操作,一些脚本老师已经帮忙写好了,启动设备时自动会产生连接
还有一个问题,我所编写的驱动程序需要编译到内核中,这个过程是如何实现的,是要对相应的Makefile进行修改吗,还有就是设备的问题,以前写的一个程序是需要通过'test'这个设备进行加载运行的,而我现在无法确定这个板子设备...这个地方的概念我还是有些模糊,不知道我叙述的准确不,我觉得驱动是通过设备运行的,但我现在不知道如何确定板子(设备)的位置...该如何判断?
谢谢!!!

论坛徽章:
0
发表于 2008-08-22 16:08 |显示全部楼层
原帖由 yyykkk1229 于 2008-8-22 15:02 发表
非常感谢蓝豆先生,大致的过程我也想的差不多了,您说的第2步老师已经将I2C总线的部分忽略掉了,主要是对功能性的实践操作
您说的第一步我还是不理解,我并不是用串口跟板子连接的,我用网络IP对板子操作,一些脚本老 ...


1.上面说的第1步的意思是:在驱动程序里免不了要读写ARM的类似GPIO的寄存器,如GPIO的置位寄存器,清零寄存器,上拉,输入输出这些等,使用一组统一的接口来操作
这些寄存器,这样不仅RTC驱动方便使用,其他的驱动程序也可以使用,如果用的是2410可能有这些接口:
        s3c2410_gpio_getpin();
        s3c2410_gpio_cfgpin(S3C2410_GPG2,S3C2410_GPG2_INP);
        s3c2410_gpio_pullup(S3C2410_GPG2,0);
        s3c2410_gpio_cfgpin(S3C2410_GPG13,S3C2410_GPG13_INP);
        s3c2410_gpio_pullup(S3C2410_GPG13,0);
第1步说的api指的是这样的设置寄存器的接口,如果是新移植的其他ARM芯片的话就需要自己实现类似这样的接口了,当然,这也不是必须的;)
ps:这一步和使用串口或网口连接板子没有直接的关系;)

2.驱动调试的时候如没有特别的要求一般先用动态加载的方式,如果需要编译到内核里,调试完成后添加就可以了;
  如果一开始就放在driver/char/目录下,每次修改后都需要重新编译驱动,连带内核也编译了,时间会很长,所以动态加载调试还是很方便的;

3.RTC编译完,加载到内核后,需要有一个用户层的应用程序来调用这个驱动进行测试,也就是你说的“test”,这个test可以自己写,在test里open驱动,然后read,write它的值。相对于RTC的驱动来说,还有一个命令行下的命令,hwclock,也可以当"test"来用,并且最终RTC驱动完成时,修改系统时间和设置RTC时间也一般也是用这个命令(结合date命令)完成的。

4.最后调试完后,将它编译进内核:
        a) 写好的驱动程序rtc_driver.c放在driver/char/目录下;
        b) 修改Makefile,加入一行obj-$(CONFIG_RTC_XXXX) += rtc_driver.o 是说:如果CONFIG_RTC_XXXX配置为Y 则编绎rtc_driver.c生成文件rtc_driver.o
        c) 修改Kconfig 加入菜单项
                        menu "Character devices"

                                config RTC_XXXX
                                <tab>   bool "rtcrtcrtcrtcrtc"
        修改Makefile和Kconfig参考Makefile中其他驱动的格式,copy就行了.
基本上是这样了,有问题的话还得具体再调试;

ps2:直接叫俺名字就行了;)

论坛徽章:
0
发表于 2008-08-22 16:10 |显示全部楼层
原帖由 dreamice 于 2008-8-22 14:39 发表
还是蓝豆兄回答比较专业

向dreamice兄学习

论坛徽章:
0
发表于 2008-08-22 16:17 |显示全部楼层
感谢感谢感谢,全都明白了,实践去了...有问题在向楼上的2位高手请教啊...
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP