linux驱动中断练习过程中的问题记录
1.中断参数不一致导致的中断释放异常,内核崩溃
问题现象:
Trying to free already-free IRQ
添加打印信息排查是free_irq()过程中出现问题,搜索看如何解决
很棒,这个博主的解决办法很精准
https://blog.csdn.net/Robotzzg/article/details/106534826
涉及到的两个接口:
int request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, const char *name, void *dev)
void free_irq(unsigned int irq, void *dev)
最后传入的参数(dev)要保持一致,不然就会内核崩溃
示例:
ret = request_irq(key->key_irq_no, key2_irq_handle,
IRQF_TRIGGER_FALLING, KEY_NAME2, key);
void key_ctrl_exit(key_ctrl_t * key)
{
"其他释放操作"
free_irq(key->key_irq_no,key);
"其他释放操作"
}
问题解决,完美!