在本文中,我们将重点讨论编写设备驱动程序时一个非常关键的方面:什么是硬件中断,更重要的是,作为驱动开发者,你该如何准确地处理它们。事实上,大量的外设(也就是你可能会为其编写驱动的设备)在需要操作系统或驱动程序立即响应时,通常会通过触发硬件中断的方式发出请求。这种硬件中断本质上是一种电信号,它最终会通知处理器的控制单元(通常这会迫使处理器将控制权转移到对应外设的中断处理程序),因为该事件需要立即处理。
要处理这类中断,你需要了解它们的一些基本工作原理;也就是说,操作系统是如何处理中断的,以及更重要的是,作为驱动开发者的你,应当如何与中断机制协同工作。Linux 作为一个基于虚拟内存的复杂操作系统,其在处理中断时引入了一定程度的抽象层,这也带来了一定的复杂性。因此,你将从学习如何处理硬件中断的基本流程开始。随后,我们会深入探讨你这样的驱动开发者最关心的一些主题:如何正确分配一个 IRQ 中断号,以及如何编写中断处理函数的代码——在这其中,有一些非常明确的注意事项和禁止事项。接着,我们会介绍为何要引入线程化中断模型,它的使用方式,以及如何启用/禁用特定的 IRQ 中断,如何通过 /proc
查看中断信息,并学习什么是中断的上半部(top half)