2 ouchao0727 ouchao0727 于 2016.02.17 16:38 提问

关于Linux驱动probe函数以及detect函数不被调用的问题

我在写一个驱动,在init里面向i2c总线注册了一个结构体,结构体中包含了probe和detect以及remove系列函数,最后能打印成功注册的信息,但是probe和detect函数中printk("===%s===",—FUNCTION—)打印信息却没有打印,这几个函数里面只有一句打印,其余的还没有写上去,这是不是probe和detect都没有被调用啊,问题出在哪?

2个回答

Mr_dsw
Mr_dsw   Ds   Rxr 2016.02.17 20:32

不会吧!一般都是在init后进行调用:
驱动程序注册的时候,会有一个match的过程,将驱动和设备两个匹配。在匹配的过程中会调用probe函数。
在bus.c中会出现static int bus_match(struct device * dev, struct device_driver * drv),这个函数就会调用
if (drv->probe) {
if ((error = drv->probe(dev))) {
dev->driver = NULL;
return error;
},这个时候就是调用Probe的时候了。

ouchao0727
ouchao0727 应该不是整个init过程之后吧,__init中总会有一个register相关的函数,在那个函数的层层调用过程中调用了probe吧
接近 2 年之前 回复
q3733353520
q3733353520   2016.02.17 16:46

init是肯定会执行的,然后insmod的时候会调用probe的相关函数,可能在最前面就出了问题没向下执行了

u012780813
u012780813 回复xiao哦草::我也遇到同样的问题,请问您最后是怎么解决的,谢谢
8 个月之前 回复
q3733353520
q3733353520 回复xiao哦草: 从头开始加打印信息,看断在哪里
接近 2 年之前 回复
ouchao0727
ouchao0727 probe函数应该是在注册的过程中调用的,注册成功了但probe函数没有被调用,所以我才感觉很奇怪
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!