设备驱动模型之驱动浅析
时间:2010-03-15 来源:sparkle-cliz
一,本文继《设备驱动模型之设备浅析》之后,结合一个简单的实例对driver这一块作一些分析。(基于TCC8900 + linux-2.6.28)
二,实例驱动如下:
#include <linux/device.h> |
1,在本例中,会用到test_bus实例中的总线。
2,设备驱动device_driver的定义:
struct device_driver { |
3,接下来跟踪一下驱动的注册过程:
int driver_register(struct device_driver *drv) |
具体的添加驱动的工作是在bus_add_driver()里完成的:
int bus_add_driver(struct device_driver *drv) |
我们更关心的应该是它是怎样匹配设备的,换句话就是这个驱动它能处理哪些设备,继续跟踪一下driver_attach():
int driver_attach(struct device_driver *drv) |
遍历挂在bus上的设备,并调用__driver_attach():
static int __driver_attach(struct device *dev, void *data) |
如果bus定义了match函数,则调用这个match(), 在我们前面的test_bus实例中,match只是简单也比较了device和device_driver的名称是否相同,相同则返回1;bus的match()匹配成功后会继续执行driver_probe_device:
int driver_probe_device(struct device_driver *drv, struct device *dev) |
OK,整个device_driver的注册过程跟踪到这里就基本完成了。
三,最后结合前两个实例来综合测试一下:
/nand2 # insmod bus_test.ko |
------------------------------------------
本文乃原创!
转载请注明出处:http://sparklecliz.cublog.cn/
------------------------------------------