最近幾天我正在學習很多關於linux第10章書ldd3的知識。我有一些疑問請澄清他們。有些是我的分析,如果他們錯了,請提出建議。啓動代碼 - linux的IRQ中斷手柄ARM
對於ARM有一箇中斷向量表地址 - 中斷IRQ - 0x00000018 然後,芯片的製造商可具有用於有一個獨立的中斷線路硬件等USART,SPI,I2C,外部中斷 - 並將它們複用到ARM的單個IRQ線路。 並有(他們選擇的)寄存器來確定哪一個觸發中斷。
此外,如果有例如有一箇中斷線可用於GPIO引腳電平變化中斷。 按照以下鏈接,可以由不同設備驅動程序的許多處理程序共享鏈接的單箇中斷線。
fiq & irq handler -- arm 通常情況下,中斷控制器是一個硬件單元,它將許多中斷線路複用在一起,產生一條到CPU的線路。當發生中斷時,控制器斷言IRQ線路。 CPU停止執行並通過IRQ向量(位置變化)跳轉到中斷處理程序。中斷處理程序通過讀取中斷控制器上的寄存器來確定中斷線,並調用正確的中斷處理程序,然後清除中斷 - 從而允許另一中斷髮生。
http://www.makelinux.net/ldd3/chp-10-sect-2 如何註冊中斷處理程序在此鏈接中描述。
https://unix.stackexchange.com/questions/47306/how-does-the-linux-kernel-handle-shared-irqs Linux調用同一共享線路的所有intruppt處理程序。
我的問題是作爲一個設備驅動程序員我只打電話.... request_irq()。
誰在提供通用代碼--IRQ中斷@ 0x00000018地址 - 它正在讀取供應商特定的寄存器以確定哪個中斷線引發了IRQ。 然後告訴linux功能 - 調用所有共享中斷處理程序註冊的IRQ行?
是GCC編譯器的芯片組啓動代碼爲我們做這項工作嗎?