USB를 내 컴퓨터의 포트에 연결한 후 이렇게 하면 lsusb
내가 찾고 있는 장치가 표시됩니다.
Bus 001 Device 004: ID 04f2:b573 Some Manufacturer
아래에 장치를 나열하면 ...등과 같은 /dev/
많은 장치 경로를 볼 수 있습니다 . 내가 이해한 바에 따르면 이러한 경로 중 하나는 내 USB 장치이거나 내 USB 장치가 연결된 위치입니다./dev/tty0
/dev/ttyUSB0
어느 것이 ID를 갖고 있는지 어떻게 알 수 있나요 04f2:b573
?
이 문제그러나 내 것과 비슷합니다 (참조수락된 답변$ID_SERIAL
) 정확히 무엇인지 , 내가 찾고 있는 ID와 동일하게 설정하는 방법, 심지어 올바른 경로가 무엇인지 모릅니다 (그의 예에서는 /dev/ttyACM0
,,,..와 같은 여러 장치 경로를 보여주기 때문입니다)./dev/sdb
/dev/input/event5
또한 두 번째 답변은 장치가 에 연결되어 있다는 것을 알고 있다고 가정합니다. /dev/ttyUSB0
이는 미리 알지 못합니다(그런데 이 특정 경로에서 테스트해도 아무 것도 제공되지 않았습니다).
답변1
어느 것이 ID를 갖고 있는지 어떻게 알 수 있나요
04f2:b573
?
이 작업을 수행하는 더 좋은 방법이 있을 수 있지만 빠르고 더러운 방법은 다음과 같습니다.
find_by_id(){
v=${1%:*}; p=${1#*:} # split vid:pid into 2 vars
v=${v#${v%%[!0]*}}; p=${p#${p%%[!0]*}} # strip leading zeros
grep -il "^PRODUCT=$v/$p" /sys/bus/usb/devices/*:*/uevent |
sed s,uevent,, |
xargs -r grep -r '^DEVNAME=' --include uevent
}
find_by_id 04f2:b573
내 기존 Huawei 휴대폰이 두 개의 직렬 tty로 표시됩니다.
$ find_by_id 12d1:
/sys/bus/usb/devices/3-1:1.0/ttyUSB0/tty/ttyUSB0/uevent:DEVNAME=ttyUSB0
/sys/bus/usb/devices/3-1:1.1/ttyUSB1/tty/ttyUSB1/uevent:DEVNAME=ttyUSB1
마지막 grep을 다음으로 변경할 수 있습니다.
xargs -r egrep -rB2 '^DEVNAME=|^IFINDEX=' --include uevent
USB 네트워크 인터페이스도 찾으려면:
$ find_by_id 0e8d:
/sys/bus/usb/devices/1-6.2.3:1.0/net/usb0/uevent-INTERFACE=usb0
/sys/bus/usb/devices/1-6.2.3:1.0/net/usb0/uevent:IFINDEX=10
$ find_by_id 03f0:
/sys/bus/usb/devices/1-6.3:1.1/usbmisc/lp1/uevent-MAJOR=180
/sys/bus/usb/devices/1-6.3:1.1/usbmisc/lp1/uevent-MINOR=1
/sys/bus/usb/devices/1-6.3:1.1/usbmisc/lp1/uevent:DEVNAME=usb/lp1
답변2
/sys/bus/usb/devices에 기호 링크가 포함되어 있기 때문에 @mosvy의 답변은 데비안 시스템에서 작동하지 않습니다. 또한 grep -R
파일 시스템에 심볼릭 링크 루프가 포함되어 있으므로 심볼릭 링크를 따라가는 방식으로는 작동하지 않습니다 .
원하는 것을 얻는 더 쉬운 방법은 다음과 같습니다.
lsusb | grep NameOfYourDevice | sed -nr 's|Bus (.*) Device ([^:]*):.*|/dev/bus/usb/\1/\2|p'
lsusb(usbutils 패키지의) 출력을 /dev/bus/usb/... 경로로 변환합니다.
블록/문자 장치 이름이 필요한 경우 다음과 같이 시도하십시오.
device() {
v=${1%:*}; p=${1#*:}
for dir in `find /sys/ -name idVendor | rev | cut -d/ -f 2- | rev`; do
if grep -q $v $dir/idVendor; then
if grep -q $p $dir/idProduct; then
find $dir -name 'device' | rev | cut -d / -f 2 | rev
fi
fi
done
}
답변3
모든 *unix 시스템에서 작동하는지 잘 모르겠습니다. 하지만 내 컴퓨터에서는 /dev/bus/{BUSID}/{DEVICEID}
버스 ID와 장치 ID에 액세스할 수 있습니다 lsusb
.