네트워크 인터페이스용 드라이버 결정 [중복]

네트워크 인터페이스용 드라이버 결정 [중복]

나열된 특정 네트워크 인터페이스와 어떤 드라이버가 연결되어 있는지 확인하고 싶습니다 ip link. 나의 첫 번째 생각은 네트워크 인터페이스를 찾고 /dev장치의 메이저 및 마이너 번호를 보고 관련 드라이버를 결정하는 것이었습니다. 그러나 네트워크 인터페이스는 아래에 나타나지 않습니다 /dev.

Linux 네트워킹 스택에 대한 기본 사항을 오해하고 있는 것 같습니다(아마도 netfilter/iptables/tc에 여러 커널 모듈이 포함될 수 있기 때문일 수 있음). 그렇다면 수정하시기 바랍니다. 내 순진한 질문은 다음과 같습니다

  • 특정 네트워크 인터페이스에 대해 어떤 드라이버가 I/O를 수행하는지 확인하는 방법은 무엇입니까?
  • Linux 네트워크 인터페이스가 나타나지 않는 이유는 무엇입니까 /dev?

답변1

sysfs에서 탐색하는 것이 최선의 접근 방식인지는 잘 모르겠지만(udevadm을 사용해야 할까요?) 적어도 검색 가능합니다.

$ DEV=p8p1
$ readlink /sys/class/net/$DEV/device/driver
../../../../bus/pci/drivers/tg3

lo"가상" 장치( ) 에서는 작동하지 않습니다 /sys/devices/virtual/. 기본 레이어(예: pci 버스)에 대한 링크가 없으므로 device위와 같이 드라이버에 쿼리할 수 없습니다.


Linux 전용 도구도 있습니다 ethtool. sysfs를 읽는 대신 동일한 이름의 소켓 ioctl을 사용합니다. ioctl은 Linux에만 적용됩니다. 표준 Unix API는 드라이버 이름을 알려주지 않습니다. ethtool동일한 결과를 제공합니다(작동하지 않으며 lo추가 정보는 의미가 없습니다).

$ ethtool -i p8p1
driver: tg3
version: 3.137
firmware-version: sb
bus-info: 0000:04:00.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: no
supports-register-dump: yes
supports-priv-flags: no

관련 정보