您的位置:首页 > 编程语言

20150226 IMX257 总线设备驱动模型编程之驱动篇

2015-02-26 13:06 337 查看
[b]20150226 IMX257 总线设备驱动模型编程之驱动篇 [/b]

2015-02-26 11:42 李海沿

前面我们已经实现了 总线和设备 的驱动程序,接下来我们的任务就是 实现 驱动 了

地址:/article/6314233.html

/article/6314232.html

在实现驱动程序之前,我们来想两个问题:

[b]一、问题分析 [/b]

1.什么时候驱动程序会在总线上找它可以处理的设备?

在driver_register(&my_driver),驱动注册时,驱动程序会在总线上找它可以处理的设备。

2.为什么说这个驱动可以处理相应的设备?

总线来判断这个驱动是否可以处理相应的设备,在总线中有.match = my_match ,当驱动在总线上找到了设备时,.match 函数就是用来判断这个驱动是否可以处理设备,判断的原则就是,判断设备的dev->bus_id和驱动的driver->name 是否相等,如果相等,则表明这个驱动是可以处理这个设备的。 此时就说明驱动找到了设备,接着,驱动程序就会调用probe这个函数,这就是我们所说的总线设备驱动模型,三者工作作用。

加载总线之后,不管是先加载驱动或者先加载设备都可以,如果先加载驱动的话,在注册设备时就会在总线上寻找驱动,如果先加载设备时,当注册驱动程序时,驱动程序会在总线中寻找有没有相应的设备。

[b]二、程序分析 [/b]

[b]1.包含总线 [/b]

和前面的设备程序一样,先包含总线

ifeq ($(KERNELRELEASE),)
KERNELDIR ?= /home/study/system/linux-2.6.31
PWD := $(shell pwd)
modules:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
modules_install:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install
clean:
rm -rf *.o *~ core .depend  *.cmd *.ko *.mod.c .tmp_versions *.markers *.order *.symvers

else
obj-m := mybus.o mydev.o mydrv.o
endif


View Code

好啦,至此,我们的总线-设备-驱动 模型已经实现了,但是并不能说我们已经懂了,这里再次废话一下,很多原理知识虽然乏味,还是要看,光会写程序是没用的,还需要懂为什么。

我也是处于学习阶段,这些都是我的一些简单的经验,能帮助大家快速入门,剩下的还是。。。入门了就会相对跟简单了。

很多人说学习linux驱动很难,那是因为对未知的恐惧,说简单点,就是那么几个结构体,算法和API的使用罢了,不说了,说多了就是欠揍的下场,

任重而道远,加油吧!!!

下面我们的任务就是实现 平台设备驱动程序 platform 的学习了。敬请期待。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: