- 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传递的最后一个参数 一致!!!
本文深入探讨了Linux内核中断管理中关于IRQ(Interrupt Request)的释放与请求一致性的问题,指出在使用free_irq时,传递的最后一个参数必须与request_irq时一致,否则将引发内核错误提示。通过分析实例代码,阐述了解决此类问题的关键步骤及背后的原理。
145

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



