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