在写中断按键实验的时候出现了上面的bug,当时卡了好久,后面通过屏蔽不同的函数的方法确定了问题出现在中断函数,原来是驱动设备通过指针传入中断函数出现了问题,最后一行行看代码终于发现问题的所在,原来注册中断时传入了错误的参数。

从上图可以看出request_irq()函数的最后一个参数void *dev,是一个无类型指针,注册函数通过这个指针把设备结构体传入中断函数。

而这个注册函数是被我定义在了一个初始化函数里面如上图所示,设备结构体是以struct irq_dev *dev指针的形式传入这个初始化函数。

所以在注册中断函数中只需要把dev传给它就行了,而我传给他的是&dev,也就是这个指针变量的地址,所以实际的设备结构体并没有被传进中断函数,这就进而导致获取不到设备结构体中的gpio标号而发生报错。
596

被折叠的 条评论
为什么被折叠?



