linux如何知道應該使用哪個irq號?
我不是驅動程序程序員,我不清楚 linux 如何為 pcie 設備分配 irq 號。
從 NIC 驅動程序範例中,Linux 似乎在執行“probe”或“open”函式之前就已經知道應該使用哪個 irq 號。
錯誤 = ixgbe_request_irq(適配器);
ixgbe 可以通過 ‘adapter’ 變數的數據獲取 irq 編號,這意味著 irq 值已經在適配器結構中,它不是生成的編號,它是一個已經存在的值。
如果從pci/pcie配置空間讀取,是不是很容易和其他設備衝突?
如果它是由核心生成/排列的,“適配器”變數中的 irq 號如何?(或者它是由 BIOS 分配的?)
對於 MSI 的中斷,它似乎是由核心生成的??
–
據我了解,應該從 PCIe 配置空間中的中斷線路寄存器(偏移 3Ch)中讀取 irq 編號,我猜這就是為什麼 kerenl 已經知道應該使用哪個 irq 編號,並且應該由 BIOS 更新中斷線路寄存器(我的猜測)在啟動期間,但仍然有一個虛擬 IRQ(當 lspci 沒有 -b 時),並且似乎 MSI 有另一個 irq(?),它們是公共資源,如要安排的記憶體嗎?
對於 legacy 中斷,irq 值是從配置空間讀取的,但是 irq 值主要由 BIOS 分配。
這部分的更多資訊:http: //tldp.org/HOWTO/Plug-and-Play-HOWTO-7.html
對於 MSI/MSI-X 中斷,它是通過分配來完成的。
例如:pci_alloc_irq_vectors() https://www.kernel.org/doc/Documentation/PCI/MSI-HOWTO.txt
這在很大程度上取決於我們正在談論的機器……在當今的 PC 上,設備在配置時會即時分配 IRQ 編號。
要深入研究這個主題,請看一下“Linux 設備驅動程序”(是的,它已經過時了,但它所說的大部分內容仍然適用)。