해당 드라이버를 비활성화하지 않고 트리 내 드라이버/ko가 장치에 바인딩되는 것을 방지하는 방법

해당 드라이버를 비활성화하지 않고 트리 내 드라이버/ko가 장치에 바인딩되는 것을 방지하는 방법

장치에 대해 활성화하려는 특정 트리 내 장치 드라이버가 있지만(즉, 모두 블랙리스트에 추가하지 않음) 다른 PCI 장치 ID를 가진 다른 장치에 바인딩하는 것을 방지하기 위한 것입니다.

구체적인 상황은 RTL8168(1GbE, DID 0x8168)과 RTL8125(2.5GbE, DID 0x8125)라는 두 개의 네트워크 카드가 있다는 것입니다. 두 가지를 모두 지원한다고 주장하는 트리 내 드라이버가 있지만 r8169이 드라이버를 사용할 경우 RTL8125(2.5GbE) 장치는 r8169감소된 성능(1GbE)으로 실행됩니다 . 배포 관련 문제가 있는 경우를 대비해 우분투 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드라이버에 바인딩되어 있으므로 모든 것이 잘 작동합니다.

관련 정보