free_irq调试一则

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    1. static int __init pinpad_init(void)  
    2.   
    3. {  
    4.   
    5.          /* Eventually set up IT */  
    6.   
    7.          request_irq(KEYBOARD_IRQ, pinpad_interrupt, SA_INTERRUPT, pinpad_name, NULL);  
    8.   
    9. }  
    10.   
    11. static void __exit pinpad_exit(void)  
    12.   
    13. {  
    14.   
    15.        /*note: if you not use pinpad_interrupt(not NULL), the kernel will holler:Trying to free already-free IRQ 4*/  
    16.   
    17.          free_irq(KEYBOARD_IRQ, NULL);  
    18.   
    19. }  

很多官方的 代码都是用的

  1. free_irq(KEYBOARD_IRQ, pinpad_interrupt);  

可惜这样做会导致内核抱怨:

  1. Trying to free already-free IRQ 4  

后来研究了后才知道, free_irq这里传递的最后一个参数必须和request_irq传递的最后一个参数 一致!!!

 

原文地址:http://blog.youkuaiyun.com/zanget/article/details/4086920

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值