저는 지난 며칠 동안 Realtek 이더넷 카드를 작동시키려고 (실패했습니다) 노력해 왔습니다. 무선 연결에는 문제가 없습니다. 이더넷 연결만 작동하지 않습니다.
RTL8101/2/6E PCI Express 카드와 함께 Dell Inspiron에 Ubuntu 16.10이 있습니다. 카드는 r8169 드라이버를 사용했는데, 이는 버그가 많고 신뢰할 수 없는 것 같습니다(예:여기). 해결책은 r8168 드라이버를 사용하는 것 같으므로 다음을 수행합니다.
r8168-dkms
apt-get을 통해 패키지를 설치했습니다 .- 모듈 을 블랙리스트
r8169
에 올렸습니다./etc/modprobe.d/
- 재부팅되었습니다.
lsmod
여전히 모듈이 사용 중인 것으로 표시되어 작동하지 않았고 , lspci -v
카드가 r8169 드라이버와 모듈을 사용하고 있다는 메시지가 계속 표시되었습니다.
modprobe.blacklist=r8169
마침내 .NET의 기본 명령줄에 추가하여 grub에 옵션을 전달하는 모듈을 블랙리스트에 올렸습니다 /etc/default/grub
.
문제는 r8168
모듈이 잘 로드되지만( 에서 확인됨 lsmod
) 카드와 연결되어 있지 않아 에서 표시되지 않는다는 것입니다 ifconfig
.루미~에Linux가 특정 장치(Realtek NIC)에 대해 특정 드라이버를 로드하도록 합니다.).
이것은 my의 관련 부분입니다 lshw -C network
.
*-network UNCLAIMED
description: Ethernet controller
product: RTL8101/2/6E PCI Express Fast/Gigabit Ethernet controller
vendor: Realtek Semiconductor Co., Ltd.
physical id: 0
bus info: pci@0000:01:00.0
version: 07
width: 64 bits
clock: 33MHz
capabilities: pm msi pciexpress msix vpd bus_master cap_list
configuration: latency=0
resources: ioport:3000(size=256) memory:b0600000-b0600fff memory:b0400000-b0403fff
나의 기기:
> lspci -v -s 01:00
01:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8101/2/6E PCI Express Fast/Gigabit Ethernet controller (rev 07)
Subsystem: Dell RTL8101/2/6E PCI Express Fast/Gigabit Ethernet controller
Flags: bus master, fast devsel, latency 0, IRQ 11
I/O ports at 3000 [size=256]
Memory at b0600000 (64-bit, non-prefetchable) [size=4K]
Memory at b0400000 (64-bit, prefetchable) [size=16K]
Capabilities: <access denied>
위 출력에는 lspci
사용 중인 드라이버나 커널 모듈이 표시되지 않습니다.
마지막으로 드라이버를 사용하도록 NIC를 만들려고 했습니다 r8168
.답변), 소용이 없습니다.
% sudo echo 10ec 8168 > /sys/bus/pci/drivers/r8168/new_id
/sys/bus/pci/drivers/r8168/new_id: File exists.
% sudo echo "0000:01:00.0" > /sys/bus/pci/drivers/r8168/bind
/sys/bus/pci/drivers/r8168/bind: File exists.
내가 무엇을 놓치고 있나요? 장치에 드라이버를 사용하도록 지시하는 또 다른 방법이 있습니까? 다음에 읽을 내용에 대한 링크, 단서 또는 표시가 도움이 될 것이며 매우 감사하겠습니다.
답변1
이렇게 할 수는 있지만 드라이버가 장치와 완전히 호환되지 않을 수 있다는 점에 유의하세요!
또한 커널 모듈을 다시 컴파일하는 작업도 포함되므로 걱정된다면 주의하는 것이 좋습니다. 특히 대부분의 NIC에는 하드웨어를 손상시킬 수 있는 맞춤형 바이너리 펌웨어 blob을 로드해야 하므로 주의하고 호환되는 펌웨어 blob을 찾으려면 약간의 숙제를 하십시오.
계속하시겠습니까? 좋은 :)
먼저, 실행 중인 커널에 대한 드라이버 소스를 찾아야 합니다. dkms를 사용하고 있으므로 이것이 이미 시스템 어딘가에 있을 것이라고 가정합니다. 이것을 갖고 나면 MODULE_DEVICE_TABLE
등록된 장소를 찾으십시오. 예를 들어 빠른 온라인 검색을 통해 r8169.c 파일에 다음 섹션이 있습니다.
static const struct pci_device_id rtl8169_pci_tbl[] = {
{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x8129), 0, 0, RTL_CFG_0 },
{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x8136), 0, 0, RTL_CFG_2 },
{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x8161), 0, 0, RTL_CFG_1 },
{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x8167), 0, 0, RTL_CFG_0 },
{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x8168), 0, 0, RTL_CFG_1 },
{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x8169), 0, 0, RTL_CFG_0 },
{ PCI_VENDOR_ID_DLINK, 0x4300,
PCI_VENDOR_ID_DLINK, 0x4b10, 0, 0, RTL_CFG_1 },
{ PCI_DEVICE(PCI_VENDOR_ID_DLINK, 0x4300), 0, 0, RTL_CFG_0 },
{ PCI_DEVICE(PCI_VENDOR_ID_DLINK, 0x4302), 0, 0, RTL_CFG_0 },
{ PCI_DEVICE(PCI_VENDOR_ID_AT, 0xc107), 0, 0, RTL_CFG_0 },
{ PCI_DEVICE(0x16ec, 0x0116), 0, 0, RTL_CFG_0 },
{ PCI_VENDOR_ID_LINKSYS, 0x1032,
PCI_ANY_ID, 0x0024, 0, 0, RTL_CFG_0 },
{ 0x0001, 0x8168,
PCI_ANY_ID, 0x2410, 0, 0, RTL_CFG_2 },
{0,},
};
MODULE_DEVICE_TABLE(pci, rtl8169_pci_tbl);
따라서 나열된 PCI ID 중 하나라도 있는 장치가 발견되면 이 드라이버를 사용하라고 커널에 지시하는 곳입니다. NIC의 PCI 장치 ID를 포함하는 추가 행을 이 구조체에 추가하고 다시 컴파일하고(dkms를 사용하여) 다시 시작해야 합니다.