为端口0x60安装中断处理程序的最佳方法

时间:2012-04-04 04:54:19

标签: linux module linux-kernel driver device-driver

我正在编写一个简单的密钥记录器,作为了解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。我被告知最佳做法是在打开文件期间调用,允许我设置中断,但我不想依赖于编写一个用户空间程序调用打开“my_dev”,以便我可以运行中断处理程序。

谢谢

2 个答案:

答案 0 :(得分:2)

别担心。 request_irq不会“占用”中断。它将处理程序放在一个回调列表上,并在发出中断信号时调用所有处理程序(用于该IRQ)。

如果您在中断过程中所做的事情繁重,您可能只想在驱动程序打开时启用处理IRQ,以便在不使用驱动程序时最大限度地减少系统中断。为此,请执行驱动程序打开和关闭调用,并保持引用计数:仅当引用计数> 0应该注册ISR

答案 1 :(得分:1)

让它先工作,并担心以后的最佳做法。在module_init中请求IRQ并不是什么大问题 - 只要中断处理程序需要的所有资源都可以立即调用它......

相关问题