![ttyUSBX 장치를 USB 직렬 장치에 연결하는 방법](https://linux55.com/image/33717/ttyUSBX%20%EC%9E%A5%EC%B9%98%EB%A5%BC%20USB%20%EC%A7%81%EB%A0%AC%20%EC%9E%A5%EC%B9%98%EC%97%90%20%EC%97%B0%EA%B2%B0%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
옵션 드라이버가 USB ID와 정확하게 일치하고 장치 드라이버를 로드합니다. 예를 들어
# lsusb
Bus 001 Device 002: ID 19d2:0031 ONDA Communication S.p.A. ZTE MF636
Bus 001 Device 003: ID 12d1:14ac Huawei Technologies Co., Ltd.
또한 하드웨어를 관리하기 위해 ttyUSBX 장치를 생성합니다.
crw-rw---- 1 root uucp 188, 0 Jul 4 13:48 /dev/ttyUSB0
crw-rw---- 1 root uucp 188, 1 Jul 4 13:49 /dev/ttyUSB1
crw-rw---- 1 root uucp 188, 2 Jul 4 13:35 /dev/ttyUSB2
crw-rw---- 1 root uucp 188, 3 Jul 4 13:37 /dev/ttyUSB3
crw-rw---- 1 root uucp 188, 4 Jul 4 13:37 /dev/ttyUSB4
crw-rw---- 1 root uucp 188, 5 Jul 4 13:37 /dev/ttyUSB5
crw-rw---- 1 root uucp 188, 6 Jul 4 13:37 /dev/ttyUSB6
crw-rw---- 1 root uucp 188, 7 Jul 4 13:37 /dev/ttyUSB7
그러나 여러 개의 USB 직렬 장치가 있고 어떤 ttyUSB가 어떤 USBID에 해당하는지 알고 싶습니다. 전임자. /dev/ttyUSB1 -> 19d2:0031
이 정보를 어디서 얻을 수 있는지 아시나요?
답변1
장치가 /dev/serial/by-id/에 등록되어 있는지 확인할 수 있습니다.
ls -l /dev/serial/by-id
이러한 이름은 일관되어야 하며 올바른 ttyUSBx를 가리켜야 합니다(symlink).
답변2
sysfs 파일 시스템을 살펴보십시오. 내 USB 직렬 포트 예:
$ lsusb
Bus 003 Device 016: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
$ ls -l /sys/bus/usb-serial/devices
lrwxrwxrwx 1 root root 0 Jul 4 17:37 ttyUSB0 -> ../../../devices/pci0000:00/0000:00:1c.0/0000:02:00.0/usb3/3-1/3-1:1.0/ttyUSB0
$ $ grep PRODUCT= /sys/bus/usb-serial/devices/ttyUSB0/../uevent
PRODUCT=67b/2303/300
보시다시피 내 컴퓨터 ttyUSB0
에 매핑되었습니다 . 067b:2303
탐험할 가치가 있는 다른 장소는 다음과 같습니다 /sys/class/tty/
. 심볼릭 링크에 주의하세요.
답변3
나는 한때유제.
/etc/udev/rules.d/50-usb.rules에 씁니다.
SUBSYSTEM=="tty", ATTRS{idVendor}=="19d2", ATTRS{idProduct}=="0031", SYMLINK+="ONDA"
SUBSYSTEM=="tty", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="14ac", SYMLINK+="HUAWEI"
끝까지. 재시작.
이제 이를 사용하여 /dev/ONDA
ONDA 장치에 액세스할 수 있습니다.
루트가 아닌 사용자가 이를 사용할 수 있도록 하려면 다음을 추가하십시오.
, MODE="0666"
각 줄의 끝까지.
답변4
다음 명령은 19d2:0016과 연결된 ttyUSB 장치 이름 목록을 제공합니다(이는 ZTE MF831 LTE 스틱의 "모뎀 모드" ID이며 사용자마다 다를 수 있음).
for i in $(find -L /sys/bus/usb/devices/ -maxdepth 2 -name "ttyUSB*"); do
egrep -i "v19d2p0016(.*)in02" $i/../modalias >/dev/null && echo "/dev/${i##*/}"
done
이는 심볼릭 링크를 포함하여 파일 이름이 ttyUSB*인 /sys/bus/usb/devices의 파일 목록을 반복합니다. 결과에서 modalias라는 파일을 검색하고 공급업체 ID "v" "19d2"와 제품 ID "p" 0016이 포함된 문자열을 찾습니다. 출력이 일치하면 USB 이름 앞에 "/dev/"가 붙은 문자열을 다시 표시합니다. 내가 아는 한 첫 번째 또는 일반적으로 마지막(가장 큰 숫자)은 ZTE 장치의 모뎀 포트입니다. 결과를 /tmp/의 파일에 반영하고 이에 따라 head -n1 또는 tail -n1 행을 사용할 수 있습니다. 허브가 있는 경우 최대 깊이를 늘려야 할 수도 있습니다.
이것은 가장 우아한 방법은 아니지만 거의 모든 Linux 변형에서 작동합니다.