Chinaunix首页 | 论坛 | 博客
  • 博客访问: 801382
  • 博文数量: 124
  • 博客积分: 1927
  • 博客等级: 上尉
  • 技术积分: 932
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-31 14:06
文章分类

全部博文(124)

文章存档

2018年(5)

2017年(2)

2016年(6)

2015年(4)

2014年(24)

2013年(7)

2012年(11)

2011年(13)

2010年(52)

我的朋友

分类: LINUX

2010-09-01 08:56:00

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.交作业。
 
 
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
                                   bool "rtcrtcrtcrtcrtc"
        修改Makefile和Kconfig参考Makefile中其他驱动的格式,copy就行了.
基本上是这样了,有问题的话还得具体再调试;
 
 
阅读(1951) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~