我的機器(正在運行Linux內核3.2.38的計算機)在引導時具有錯誤的PCI設備的子系統ID(子設備和子供應商ID).如果我然后在系統仍處于啟動狀態(即熱插拔)時物理地拔出PCI設備并重新插入,則它將獲得正確的ID.
請注意,錯誤的子設備ID和子供應商ID與設備的設備ID和供應商ID相同(請參見下面的lspci輸出中的前兩行).
以下是熱插入設備之前和之后lspci -vvnn的輸出:
熱插拔之前:
0b:0f.0 Bridge [0680]: Device [1a88:4d45] (rev 05)
Subsystem: Device [1a88:4d45]
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- SERR-
Latency: 32 (250ns min, 63750ns max)
Interrupt: pin A routed to IRQ 10
Region 0: I/O ports at 2100 [size=256]
Region 1: I/O ports at 2000 [size=256]
Region 2: Memory at 92920000 (32-bit, non-prefetchable) [size=64]
熱插拔后:
0b:0f.0 Bridge [0680]: Device [1a88:4d45] (rev 05)
Subsystem: Device [007d:5a14]
Control: I/O- Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- SERR-
Interrupt: pin A routed to IRQ 10
Region 0: I/O ports at 2100 [disabled] [size=256]
Region 1: I/O ports at 2000 [disabled] [size=256]
Region 2: [virtual] Memory at 92920000 (32-bit, non-prefetchable) [size=64]
我的問題:是否有一種方法可以在不熱插拔設備的情況下固定ID?例如強制內核重新讀取PCI設備ID,例如通過執行PCI總線重新掃描/重新枚舉/重新配置?
任何幫助將不勝感激.謝謝.
PS.請注意,該問題實際上與內核/軟件無關,因為即使啟動到UEFI內部Shell中也存在該問題.
PPS.在這種情況下,PCI設備為MEN F206N,“我的機器”為MEN F22P
解決方法:
您可以通過以下方式強制重新掃描PCI:
#回聲1> / sys /總線/ pci /重新掃描
標簽:pci-e,pci,linux,pci-bus
來源: https://codeday.me/bug/20191029/1961621.html