在本文中,我們將重點討論編寫設備驅動程序時一個非常關鍵的方面:什么是硬件中斷,更重要的是,作為驅動開發者,你該如何準確地處理它們。事實上,大量的外設(也就是你可能會為其編寫驅動的設備)在需要操作系統或驅動程序立即響應時,通常會通過觸發硬件中斷的方式發出請求。這種硬件中斷本質上是一種電信號,它最終會通知處理器的控制單元(通常這會迫使處理器將控制權轉移到對應外設的中斷處理程序),因為該事件需要立即處理。
要處理這類中斷,你需要了解它們的一些基本工作原理;也就是說,操作系統是如何處理中斷的,以及更重要的是,作為驅動開發者的你,應當如何與中斷機制協同工作。Linux 作為一個基于虛擬內存的復雜操作系統,其在處理中斷時引入了一定程度的抽象層,這也帶來了一定的復雜性。因此,你將從學習如何處理硬件中斷的基本流程開始。隨后,我們會深入探討你這樣的驅動開發者最關心的一些主題:如何正確分配一個 IRQ 中斷號,以及如何編寫中斷處理函數的代碼——在這其中,有一些非常明確的注意事項和禁止事項。接著,我們會介紹為何要引入線程化中斷模型,它的使用方式,以及如何啟用/禁用特定的 IRQ 中斷,如何通過 /proc
查看中斷信息,并學習什么是中斷的上半部(top half)