free_irq调试一则 static int __init pinpad_init(void) { /* Eventually set up IT */ request_irq(KEYBOARD_IRQ, pinpad_interrupt, SA_INTERRUPT, pinpad_name, NULL); } static void __exit pinpad_exit(void) { /*note: if you not use pinpad_interrupt(not NULL), the kernel will holler:Trying to free already-free IRQ 4*/ free_irq(KEYBOARD_IRQ, NULL); } 很多官方的 代码都是用的 free_irq(KEYBOARD_IRQ, pinpad_interrupt); 可惜这样做会导致内核抱怨: Trying to free already-free IRQ 4 后来研究了后才知道, free_irq这里传递的最后一个参数必须和request_irq传递的最后一个参数 一致!!!