我有一个特定的树内设备驱动程序,我想让它为设备启用(即不将其全部列入黑名单),但只是为了阻止它绑定到具有不同 PCI 设备 ID 的另一个设备。
具体情况是,我有两个网卡,RTL8168(1GbE,DID 0x8168
)和RTL8125(2.5GbE,DID 0x8125
)。有一个树内驱动程序r8169
声称支持两者,但当 RTL8125 (2.5GbE) 设备使用此驱动程序时r8169
,它的运行性能会下降(1GbE)。我使用的是 ubuntu 20.04 发行版,以防出现任何发行版特定的问题。
我希望继续对设备 RTL8168 (1GbE) 使用树内驱动程序,但对设备 RTL8125 (2.5GbE)r8169
使用不同的树外驱动程序 ( )。r8125
我看到这条线声称 RTL8125 的 DID for r8169
,所以从技术上讲我可以删除它然后重建内核,但我不喜欢走这条路(因为所有安全启动的麻烦)
我可以手动重新绑定驱动程序,但这不会在重新启动后继续存在。
希望听到有关覆盖此类驱动程序绑定的正确方法的建议。谢谢!以下是lspci
该特定示例中这两个设备的输出。
06:00.0 0200: 10ec:8125
Subsystem: 10ec:0123
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 64 bytes
Interrupt: pin A routed to IRQ 32
Region 0: I/O ports at e000 [size=256]
Region 2: Memory at fc610000 (64-bit, non-prefetchable) [size=64K]
Region 4: Memory at fc620000 (64-bit, non-prefetchable) [size=16K]
Expansion ROM at fc600000 [disabled] [size=64K]
Capabilities: <access denied>
Kernel driver in use: r8169
Kernel modules: r8169, r8125
0a:00.0 0200: 10ec:8168 (rev 15)
Subsystem: 1043:8677
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 64 bytes
Interrupt: pin A routed to IRQ 36
Region 0: I/O ports at d000 [size=256]
Region 2: Memory at fc504000 (64-bit, non-prefetchable) [size=4K]
Region 4: Memory at fc500000 (64-bit, non-prefetchable) [size=16K]
Capabilities: <access denied>
Kernel driver in use: r8169
Kernel modules: r8169
答案1
我就是这样做的:
- 让系统正常启动并让它绑定8125卡和8169驱动
- 使用某种启动脚本来解绑8125 卡的 8169 驱动程序和绑定8125 驱动程序
例子:
- 通过命令查找卡的PCI地址
在此示例中,我假设该卡位于插槽中lspci -k
0000:01:00.0
: - 解除 PCI 设备
000:01:00.1
与r8169
驱动程序的绑定:echo 0000:01:00.0 > /sys/bus/pci/drivers/r8169/unbind
- 然后将其绑定到
r8125
驱动程序:echo 0000:01:00.0 > /sys/bus/pci/drivers/r8125/bind
根据需要重新启动并重新配置网络接口(ip link up
、ifconfig up
等)。
这样,8169 卡仍与r8169
驱动程序绑定,因此一切正常。