- 論壇徽章:
- 4
|
假如是2片8259A,最大irq是15.
1) BIOS寫pci設(shè)備的interrupt_line時(shí),可能寫的是個(gè)錯(cuò)的,或者沒寫.
2) init進(jìn)程遍歷一遍所有pci_dev,pci_dev -> irq > 15 的一律pci_dev -> irq = 0,這部分pci_dev也歸結(jié)到BIOS未分配irq的那類pci_dev中.
3)init進(jìn)程遍歷一遍滿足如下條件的pci_dev
a) BIOS未分配irq
b) router事實(shí)上,已經(jīng)為這個(gè)pci_dev選擇好了irq.
讀出router設(shè)置的這個(gè)irq,寫到pci_dev -> irq.
kernel做到這步就不管了,還可能剩下部分pci_dev,bios也沒有為其分配irq,router也沒有為這個(gè)pci_dev選擇irq. 但這部分pci_dev怎么處理,完全是驅(qū)動(dòng)模塊的事.
驅(qū)動(dòng)模塊里的probe函數(shù)中,要調(diào)用修改router設(shè)置的函數(shù), 如沒有修改router設(shè)置,也沒有驗(yàn)證router是否設(shè)置成功,就直接request_irq,應(yīng)該是驅(qū)動(dòng)的錯(cuò)誤. |
|