これは、デバイスに対してアクティブにしたい特定のツリー内のデバイスドライバがあります(つまり、すべてブラックリストに追加しない)、他のPCIデバイスIDを持つ他のデバイスにバインドするのを防ぐためです。
具体的な状況は、RTL8168(1GbE、DID 0x8168
)とRTL8125(2.5GbE、DID 0x8125
)の2つのネットワークカードがあることです。両方をサポートすると主張するツリー内ドライバがありますが、r8169
このドライバを使用すると、RTL8125(2.5GbE)デバイスはパフォーマンスがr8169
低下した(1GbE)で動作します。配布に関する問題がある場合に備えて、Ubuntu 20.04ディストリビューションを使用しています。
RTL8168(1GbE)デバイスにはツリー内ドライバを使い続けたいが、r8169
RTL8125(2.5GbE)デバイスには別のツリー外部ドライバ()を使用したいと思います。r8125
私は見たこの行RTL8125のDIDが課金されたため、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
。 - ドライバ
000:01:00.1
でPCIデバイスのバインドを解除します。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
ドライバにバインドされているため、すべてがうまく機能します。