我正在编写一个简单的按键记录器,作为理解linux驱动程序的中断和IO端口的一种方法。现在,根据我所读到的内容,我需要通过...
int request_irq(unsigned int irq, irqreturn_t (*handler)(int, void *, struct pt_regs *), unsigned long flags, const char *dev_name, void *dev_id);然而,从我读到的内容来看,如果我在module_init()期间调用request_irq,我将占用中断。我的问题是,我想与其他资源共享中断,但我不确定如何调用此中断。我希望我可以只使用module_init()调用函数,并将我的标志设置为SA_SHIRQ。我被告知最好的做法是在打开文件期间调用,这允许我设置中断,但我不想依赖于编写一个调用open "my_dev“的用户空间程序来运行中断处理程序。
谢谢
发布于 2012-04-04 13:01:14
别担心。request_irq不会“独占”中断。它将处理程序放在回调列表上,并在发出中断信号时调用所有处理程序(针对该IRQ)。
如果您在中断期间所做的是繁重的提升,那么您可能希望仅在驱动程序打开时才启用处理IRQ,以便在驱动程序不使用时最大限度地减少系统中断。为此,实现驱动程序打开和关闭调用,并保留引用计数:仅当引用计数>0时才应注册ISR
发布于 2012-04-04 13:04:40
首先让它工作,然后再考虑最佳实践。在module_init中请求IRQ并不是什么大问题-只要中断处理程序需要的所有资源都可用,它就可以立即被调用……
https://stackoverflow.com/questions/10005149
复制相似问题