我的机器(正在运行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- <TAbort- <MAbort- >SERR- <PERR- INTx-
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- <TAbort- <MAbort- >SERR- <PERR- INTx-
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 /重新扫描