linux驱动摸索 --DS1302芯片移植(基于总线驱动设备模型)

本文介绍了如何将DS1302时钟芯片移植到Linux系统,使用总线驱动设备模型。通过分析内核版本2.6.32.2和mini2440开发板,详细讲述了DS1302驱动的注册过程,以及在移植过程中遇到的寄存器映射和写保护问题的解决方法。
摘要由CSDN通过智能技术生成

内核版本:linux-2.6.32.2
开发板:mini2440


基于总线驱动设备模型基本框架:

bus_drv_dev模型(是一种机制)

对于device来说:

1.把device相关信息放入bus的dev链表

2.从bus的drv链表取出每一个drv,用bus的match函数判断drv能否支持dev

3.若能支持,调用drv的probe函数。


对于driver来说

1.把driver放入drv链表

2.从dev链表中取出,利用mach函数一一比较,若发现匹配的,调用probe函数。


最近在弄DS1302芯片,对于单片机的程序,可以参考我的另外一篇博文stm8及DS1302的一些操作,然后想移植到linux系统中来,在源码中包含了一个DS1302的驱动文件(\linux-2.6.32.2\drivers\rtc\rtc-ds1302.c

打开该文件,首先查看他的模块init函数:

static int __init ds1302_rtc_init(void)
{
return platform_driver_probe(&ds1302_platform_driver, ds1302_rtc_probe);
}

继续追踪,在platform_driver_probe函数里,看到了retval = code = platform_driver_register(drv);确定该实现,运用了总线驱动设备模型。

如果我要用它的驱动的话可以自己先完成platform_device_registerv的注册,先确定硬件相关的接口,我把ds1302模块飞线接在了mini2440开发板的GPIOF0,1,2三个IO口上。

创建一个ds1302_dev.c文件,完成platform_device_registerv的注册。注意,在rtc-ds1302.c中ds1302的驱动name是"rtc-ds1302",所以该文件中dev name也一定是"rtc-ds1302",只有两者匹配,最后才会调用probe函数。

ds1302_dev.c的源码如下:

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/init.h>
#include <linux/delay.h>
#include <asm/uaccess.h>
#include <asm/irq.h>
#include <mach/i
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值