ttyUSBX 장치를 USB 직렬 장치와 일치시키는 방법


21

옵션 드라이버가 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

이 정보를 얻을 수있는 지점을 알고 있습니까?


당신은 공급 업체 / 제품 등의 세부 사항을 알고 있다면, 이 답변이 중대하다
earcam는

답변:


12

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/입니다. 심볼릭 링크에주의하십시오.


PRODUCT 목록에 추가하기 위해 무엇을 했습니까?
Igor Stoppa

@IgorStoppa, 예를 들어 의 결과 cat에서 uevent파일로 시도하십시오 find /sys -name ttyACM0. 직렬 장치의 노드 이름을 대체하십시오.
sherrellbc

9

장치가 / dev / serial / by-id /에 등록되어 있는지 확인할 수 있습니다

ls -l / dev / serial / by-id

이러한 이름은 일관되어야하며 올바른 ttyUSBx를 가리 킵니다 (symlink).


일부 설명, 예 등을 추가 할 수 있습니까? 한 줄로 된 답변은 SE에서 좋지 않은 것으로 간주됩니다
Romeo Ninov

@RomeoNinov 좋아요, 요청에 따라 설명을 추가했습니다. 이것은 단순히 다른 디렉토리를 조사하는 것보다 어렵지 않으므로 답변을보다 정교하게 만드는 것이 무엇을 향상시키는 지 알 수 없습니다. 미안합니다.
Waxhead

Raspberry Pi에 연결된 두 개의 동일한 어댑터 (두 개의 Arduino)가 있습니다. ls -l /dev/serial/by-id하나의 어댑터 만 반환 ../../ttyUSB1하지만 ls -l /sys/bus/usb-serial/devices둘 다 표시합니다. 그래서 나는 이것이 좋은 대답이라고 생각하지 않습니다.
Daniel F

6

나는 비슷한 문제 가 있었다 .

이것을 /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/ONDAONDA 장치를 이용할 수 있습니다 .

루트가 아닌 사용자가이를 사용할 수있게하려면 추가

, MODE="0666"

각 줄의 끝까지.


나는 이것을하고 그들이 링크 된 파일을 확인했다. 내가 가지고있는 제품에는 솔리드 디스크, USB 직렬과 같은 여러 인터페이스가 있습니다. / dev / ttyACM0에 대한 연결을 예상했지만 / dev / sda에 연결되었습니다. 규칙을 적용 할 장치 유형을 규칙 파일에 정의하는 방법은 무엇입니까? 나는 /etc/udev/rules.d/99-ftdi.rules에 규칙을 썼다
nurp

확인 : 규칙 매개 변수에 SUBSYSTEM == "tty"를 추가했습니다. 이 값은udevadm info --name=/dev/ttyACM0
nurp

3

udev를 사용하고 장치에 대한 심볼릭 링크를 만드는 규칙을 작성합니다.

장치를 구별하기에 충분한 정보를 얻으려면 모든 장치에 대해 다음과 같이 시도하십시오.

$ udevadm info --query all --name /dev/ttyUSB0 --attribute-walk

1

다음 명령은 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

이는 / sys / bus / usb / devices에서 파일 이름 ttyUSB * (symlinks 포함)의 파일 목록을 반복합니다. 결과 내에서 modalias라는 파일을 검색하고 공급 업체 ID "v" "19d2"와 제품 ID "p"0016을 포함하는 문자열을 찾습니다. 출력이 일치하면 "/ dev /로 시작하는 문자열을 에코합니다. "USB 앞에? 이름. 첫 번째 또는 가장 마지막 인 Afaik (가장 높은 숫자)은 ZTE 장치의 모뎀 포트입니다. 결과를 / tmp /의 파일로 에코하고 그에 따라 행을 head -n1 또는 tail -n1로 에코 할 수 있습니다. 허브가있는 경우 maxdepth를 늘려야 할 수도 있습니다.

이것은 가장 우아한 방법은 아니지만 거의 모든 Linux 변형에서 작동합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.