そのドライバを無効にせずにツリー内のドライバ/ jaがデバイスにバインドされるのを防ぐ方法

そのドライバを無効にせずにツリー内のドライバ/ jaがデバイスにバインドされるのを防ぐ方法

これは、デバイスに対してアクティブにしたい特定のツリー内のデバイスドライバがあります(つまり、すべてブラックリストに追加しない)、他のPCIデバイスIDを持つ他のデバイスにバインドするのを防ぐためです。

具体的な状況は、RTL8168(1GbE、DID 0x8168)とRTL8125(2.5GbE、DID 0x8125)の2つのネットワークカードがあることです。両方をサポートすると主張するツリー内ドライバがありますが、r8169このドライバを使用すると、RTL8125(2.5GbE)デバイスはパフォーマンスがr8169低下した(1GbE)で動作します。配布に関する問題がある場合に備えて、Ubuntu 20.04ディストリビューションを使用しています。

RTL8168(1GbE)デバイスにはツリー内ドライバを使い続けたいが、r8169RTL8125(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ドライバにバインドされているため、すべてがうまく機能します。

関連情報