关于中断处理

当中断发生的时候,操作系统会先去查找中断向量表中该中断发生的时候的中断处理程序是什么。然后再执行这个中断处理例程。

现在来看一下在内核态下(我们主要说的是驱动程序)是如何申请中断的。

经常可以在open函数的实现中看见对request_irq这个函数的调用,其实这个就是在申请中断。

假设我们已经写好了中断处理函数如下:

void interrupt_handler(int irq, void *dev_id, struct pt_regs *regs)
{
    //…
    return IRQ_HANDLED;
}

我们可以在回调函数temp_open方法中调用中断处理注册如下:

int temp_open(struct inode* inode, struct file *filp)
{
    if(!request_irq(TEMP_IRQ, interrupt_handler,

                    SA_INTERRUPT, “temp_chr”, NULL))
    {
        //…申请irq成功
    }
    return 0;
}

这样我们的中断处理函数就注册成功了,当相应的中断发生的时候,中断处理函数就会被调用。