USB Wi-Fi 동글 인터페이스에서 공급업체 확인: 제품 ID

USB Wi-Fi 동글 인터페이스에서 공급업체 확인: 제품 ID

저는 USB Wi-Fi 동글과 Wi-Fi 키를 가상 머신(QEmu/KVM 가상화)에 자동으로 추가하는 bash 스크립트를 작업 중입니다.

[편집] 가상 머신은 현재데비안 버스터출시 버전[/편집]

호스트 컴퓨터에서 TP-Link TL-WN823N USB 동글을 연결하면 다음 인터페이스가 추가됩니다.

user@host:~$ ip -o link | grep wlx
57: wlx123456789012: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000\    link/ether 2a:51:d5:12:34:56 brd ff:ff:ff:ff:ff:ff

USB 장치를 나열하면 다음과 같은 결과가 나타납니다.

user@host:~$ lsusb | grep TP-Link
Bus 002 Device 009: ID 2357:0109 TP-Link TL WN823N RTL8192EU

그러므로 다음과 같이 인식된다.wlx123456789012인터페이스, 공급업체:제품 ID는 다음과 같습니다.2357:0109장비입니다#9USB 버스#2.*

인터페이스 이름만 알고 있는 경우 공급업체:제품 ID를 어떻게 확인하나요?

@meuh 제안됨

user@host:~$ ls --format=commas /sys/class/net/wlx123456789012/device
authorized, bAlternateSetting, bInterfaceClass, bInterfaceNumber,
bInterfaceProtocol, bInterfaceSubClass, bNumEndpoints, driver,
ep_01, ep_02, ep_03, ep_04, ep_05, ep_06, ep_81, ieee80211, leds,
modalias, net, power, subsystem, supports_autosuspend, uevent

그래서 아니야행상인...도 아니다장비파일을 이 위치에 직접 저장합니다(그에 따르면 이는 테스트에 온보드 Wi-Fi가 포함되어 있기 때문이라고 합니다).

하지만 그것이 나에게 영감을 주었기 때문에 다음과 같이 시도해 보았습니다.

    user@host:~$ grep -iEr "2357|0109" /sys/class/net/wlx123456789012/device
...
/sys/class/net/wlx123456789012/device/modalias:usb:v2357p0109d0101dc00dsc00dp00icFFiscFFipFFin00
/sys/class/net/wlx123456789012/device/uevent:PRODUCT=2357/0109/101
/sys/class/net/wlx123456789012/device/uevent:MODALIAS=usb:v2357p0109d0101dc00dsc00dp00icFFiscFFipFFin00

그래서/sys/class/net/wlx123456789012/device, 가지다:

모드 별칭: usb:v23570109d0101dc00dsc00dp00icFFiscFFipFFin00

ueevent:제품=2357/0109/101

그래서 추적을 찾았는데 @meuh가 또 다른 현지화를 제공했다는 사실이 해결책을 의심하게 만듭니다(특히 distro 버전을 변경하거나 distro만 변경하는 경우).

@Tom Yan이 제안했습니다.

user@host:~$ udevadm info /sys/class/net/wlx123456789012 \
 | sort -r | awk '/ID_(VENDOR|MODEL)_ID/'
E: ID_VENDOR_ID=2357
E: ID_MODEL_ID=0109

참고: 여기서는 PRODUCT 대신 MODEL이 사용됩니다.정렬 -rMODEL 행보다 먼저 VENDOR 행을 정렬하는 데 사용됩니다.

답변1

방금 Ralink RT5370 무선 어댑터를 Debian 10 시스템에 연결했습니다.

기본적으로 네트워크 장치로 표시됩니다 wlxc83a35c4a44b.

/sys/class/*이는 기본적으로 잎이 주로 분기에 대한 기호 링크인 디렉토리 하위 트리 라는 점을 기억해야 합니다 /sys/devices/*.

# realpath /sys/class/net/wlxc83a35c4a44b
/sys/devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8:1.0/net/wlxc83a35c4a44b
# realpath /sys/class/net/wlxc83a35c4a44b/device
/sys/devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8:1.0

따라서 device심볼릭 링크는 실제로 분기 내에서 실행되며 /sys/devices/...USB 컨트롤러와 장치 사이에 레이어( )가 있습니다(이 경우 USB 허브가 없음). 1-8이 레벨에는 유용한 것이 포함되어 있습니까?

# ls --format=commas /sys/devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8:1.0/..
1-8:1.0/, ep_00/, power/, authorized, avoid_reset_quirk, bcdDevice,
bConfigurationValue, bDeviceClass, bDeviceProtocol, bDeviceSubClass,
bmAttributes, bMaxPacketSize0, bMaxPower, bNumConfigurations, bNumInterfaces,
busnum, configuration, descriptors, dev, devnum, devpath, driver@,
firmware_node@, idProduct, idVendor, ltm_capable, manufacturer, maxchild, port@,
product, quirks, removable, remove, rx_lanes, serial, speed, subsystem@,
tx_lanes, uevent, urbnum, version

idProduct와 가 있습니다 idVendor. 이름만으로 네트워크 장치에 액세스할 수 있나요?

# cat /sys/class/net/wlxc83a35c4a44b/device/../idProduct
5370
# cat /sys/class/net/wlxc83a35c4a44b/device/../idVendor
148f

올바른 장치인지 확인해 보겠습니다.

# lsusb -d 148f:5370
Bus 001 Device 014: ID 148f:5370 Ralink Technology, Corp. RT5370 Wireless Adapter

맞는 것 같습니다.

또한 루트 없이도 작동하며 중간에 USB 허브를 추가합니다.

$ realpath /sys/class/net/wlxc83a35c4a44b/device
/sys/devices/pci0000:00/0000:00:14.0/usb1/1-7/1-7.2/1-7.2:1.0
$ cat /sys/class/net/wlxc83a35c4a44b/device/../idVendor
148f
$ cat /sys/class/net/wlxc83a35c4a44b/device/../idProduct
5370

답변2

따라서 udev @Tom Yan이 제안한 대로 모든 Wi-Fi USB 어댑터 인터페이스를 Vendor: 제품과 함께 나열하려면 다음을 제안합니다.

user@host:~$ for i in $( find /sys/class -name "wlx*" ) ; do \
 echo "$( echo $i | grep -oE "[^/]+$" ) $( \
  udevadm info $i \
  | awk '\
   function get_val () { split ( $0 , a , "=" ) ; return a [ 2 ] } \
   /ID_VENDOR_ID/ { v = get_val() } \
   /ID_MODEL_ID/ { m = get_val() } \
   END { print v ":" m }\
  ' \
 )" ; \
done
wlx123456789012 2357:0109

설명: 각 인터페이스(for i in ...; do ...; done)에 대해 모든 Wi-Fi USB 동글 인터페이스 경로를 나열하고(/sys/class -name "wlx*" 찾기) 각 경로에 대해 가져와서 인터페이스 이름(echo $i | grep -oE "[^/]+$" ) 그래서 /sys/class/net/wlx123456789012 -> wlx123456789012, 모든 udev 속성을 가져오고 이를 필터링합니다(udevadm info $i | awk ...) .

필터링 프로세스:

  • 현재 레코드($0)를 등호 문자("=")로 나누고 그 결과를 "a" 배열에 저장하고 "a"의 두 번째 멤버를 반환하여 ID 값을 반환하는 함수를 만듭니다(함수 get_val)

  • 값 필터링 및 저장( /ID_VENDOR_ID/ ... 및 /ID_MODEL_ID/ ... )

  • 마지막으로 저장된 값을 올바른 순서로 인쇄합니다. Supply:Model(END {...})


그리고 @telcoM의 시스템 독립적이고 간단한 방법을 기반으로 합니다.

user@host:~$ for i in $( find /sys/class/net/ -type l -name "wlx*" ) ; do \
 echo "$( \
  echo $i | grep -oE "[^/]+$" \
 ) $( \
  cat $i/device/../idVendor \
 ):$( \
  cat $i/device/../idProduct \
 )" ; \
done
wlx123456789012 2357:0109

설명: 각 인터페이스(for i in ... ; do ... ; done )에 대해 모든 Wi-Fi USB 어댑터 인터페이스 링크( find /sys/class/net -type l -name "wlx*" )와 각 링크만 나열합니다. 인터페이스 이름( echo $i | grep -oE "[^/]+$" )을 가져오고 표시하므로 /sys/class/net/wlx123456789012 -> wlx123456789012를 표시하고공급업체 ID상위 폴더의 콘텐츠를 연결하고 동일한 작업을 수행합니다.제품 번호

관련 정보