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

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

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

不会吧!一般都是在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的时候了。