lsusb의 출력을 /dev/ttyUSB* 이름과 일치시키는 방법을 찾고 싶습니다.

lsusb의 출력을 /dev/ttyUSB* 이름과 일치시키는 방법을 찾고 싶습니다.

마주하다:

root@conserver01:/home/owen# lsusb -t
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 5000M
        |__ Port 1: Dev 3, If 0, Class=Hub, Driver=hub/4p, 5000M
        |__ Port 2: Dev 4, If 0, Class=Hub, Driver=hub/4p, 5000M
        |__ Port 3: Dev 5, If 0, Class=Hub, Driver=hub/4p, 5000M
        |__ Port 4: Dev 6, If 0, Class=Hub, Driver=hub/4p, 5000M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/1p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
        |__ Port 1: Dev 3, If 0, Class=Hub, Driver=hub/4p, 480M
            |__ Port 1: Dev 4, If 0, Class=Hub, Driver=hub/4p, 480M
                |__ Port 3: Dev 13, If 0, Class=Vendor Specific Class, Driver=ftdi_sio, 12M
                |__ Port 1: Dev 6, If 0, Class=Vendor Specific Class, Driver=ftdi_sio, 12M
                |__ Port 4: Dev 15, If 0, Class=Vendor Specific Class, Driver=ftdi_sio, 12M
                |__ Port 2: Dev 9, If 0, Class=Vendor Specific Class, Driver=ftdi_sio, 12M
            |__ Port 2: Dev 5, If 0, Class=Hub, Driver=hub/4p, 480M
                |__ Port 4: Dev 16, If 0, Class=Vendor Specific Class, Driver=ftdi_sio, 12M
                |__ Port 2: Dev 12, If 0, Class=Vendor Specific Class, Driver=ftdi_sio, 12M
                |__ Port 3: Dev 14, If 0, Class=Vendor Specific Class, Driver=ftdi_sio, 12M
                |__ Port 1: Dev 8, If 0, Class=Vendor Specific Class, Driver=ftdi_sio, 12M
            |__ Port 3: Dev 7, If 0, Class=Hub, Driver=hub/4p, 480M
                |__ Port 1: Dev 11, If 0, Class=Vendor Specific Class, Driver=ftdi_sio, 12M
            |__ Port 4: Dev 10, If 0, Class=Hub, Driver=hub/4p, 480M

그리고:

root@conserver01:/home/owen# ls -al /dev/ttyUSB*
crw-rw---- 1 root dialout 188, 0 Jun 17 03:49 /dev/ttyUSB0
crw-rw---- 1 root dialout 188, 1 Jun 17 03:50 /dev/ttyUSB1
crw-rw---- 1 root dialout 188, 2 Jun 17 03:51 /dev/ttyUSB2
crw-rw---- 1 root dialout 188, 3 Jun 17 03:54 /dev/ttyUSB3
crw-rw---- 1 root dialout 188, 4 Jun 17 03:54 /dev/ttyUSB4
crw-rw---- 1 root dialout 188, 5 Jun 17 03:55 /dev/ttyUSB5
crw-rw---- 1 root dialout 188, 6 Jun 14 20:20 /dev/ttyUSB6
crw-rw---- 1 root dialout 188, 7 Jun 14 20:20 /dev/ttyUSB7
crw-rw---- 1 root dialout 188, 8 Jun 14 20:20 /dev/ttyUSB8

나는 두 가지를 성취하고 싶습니다:

  1. lsusb 출력 행을 /dev 항목과 일치시키는 방법입니다.
  2. USB 허브의 포트(또는 특정 FTDI 어댑터 중 하나가 허용/유용함)와 /dev/ 항목 간에 일관된 관계를 생성하는 방법입니다.

어떤 도움이라도 대단히 감사하겠습니다. 나는 이것이 이전에 게시된 적어도 하나의 다른 질문과 유사하다는 것을 알고 있지만 질문이 모호하고 답변이 비슷해 보이지만 내가 원하는 것을 완전히 달성하지 못합니다. 내 질문이 더 명확해지기를 바랍니다.

또한 나는 이러한 목적으로 lsusb 이외의 Linux 리소스를 사용하는 답변에 반대하지 않는다는 점에 유의하십시오. 이는 제가 가장 잘 알고 있는 도구일 뿐입니다. 비FTDI 장치는 완전성을 위해 포함되었지만 16포트 Genesys Logic 허브에 연결되어 있으며 내부적으로 함께 쌓인 5개의 4포트 Genesys Logic 허브로 구현된 것으로 보입니다.

답변1

readlink -f /sys/class/tty/ttyUSB0/device다음과 같은 것을 제공해야 합니다:

/sys/devices/pci0000:00/0000:00:12.2/usb1/1-4/1-4.3/1-4.3.1/1-4.3.1:1.0/ttyUSB0

전체 하드웨어 경로가 있습니다.

대부분의 시스템에서는 다음 과 udev같은 일부도 생성할 것으로 예상됩니다 ./dev/serial/by-path/<device-hardware-path>/dev/serial/by-id/<device-id>

$ readlink -f /dev/serial/by-path/pci-0000:00:12.2-usb-0:4.3.1:1.0-port0
/dev/ttyUSB0

udevadm info --name=ttyUSB0또한 경로를 포함하여 많은 정보가 제공되어야 합니다.

답변2

해결책은 사용자 정의 uDEV 규칙을 사용하여 더 많은 심볼릭 링크를 만든 다음 해당 심볼릭 링크를 사용하는 것입니다.

제 경우에는 "ID_SERIAL_SHORT"와 같은 udev 규칙에서 사용할 수 있는 (적어도 FTDI 장치에서) 제조업체가 제공한 장치 일련 번호를 사용하기로 선택했습니다. 내가 만든 uDEV 규칙은 다음과 같습니다: /etc/udev/rules.d/60-usb-serial.rules

SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001",SYMLINK+="tty.FTDI.%E{ID_SERIAL_SHORT}"
EOT

제품 6001 공급업체 0403은 제가 사용하고 있는 FTDI 직렬 어댑터입니다.

이렇게 하면 /dev/tty.FTDI에서 모든 터미널을 사용할 수 있습니다.

root@conserver01:/home/owen# ls -la /dev/tty.FTDI*
lrwxrwxrwx 1 root root 7 Sep 19 23:06 /dev/tty.FTDI.A95VS8DR -> ttyUSB6
lrwxrwxrwx 1 root root 7 Sep 19 23:06 /dev/tty.FTDI.A9G9Q4LI -> ttyUSB3
lrwxrwxrwx 1 root root 7 Sep 19 23:06 /dev/tty.FTDI.A9SS5W0V -> ttyUSB4
lrwxrwxrwx 1 root root 7 Sep 19 23:06 /dev/tty.FTDI.A9TYJTXQ -> ttyUSB1
lrwxrwxrwx 1 root root 7 Sep 19 23:06 /dev/tty.FTDI.A9VSKAKD -> ttyUSB7
lrwxrwxrwx 1 root root 7 Sep 19 23:06 /dev/tty.FTDI.A9X5K7PH -> ttyUSB0
lrwxrwxrwx 1 root root 7 Sep 19 23:06 /dev/tty.FTDI.AQ017QQB -> ttyUSB2
lrwxrwxrwx 1 root root 7 Sep 19 23:06 /dev/tty.FTDI.AQ017USH -> ttyUSB5

재부팅할 때마다 심볼릭 링크 끝의 연결이 변경되는 경향이 있지만 /etc/conserver/conserver.cf 파일이 FTDI 이름을 참조하고 해당 이름이 항상 직렬을 통해 올바른 장치에 연결되므로 상관하지 않습니다. 숫자 .

여기에는 더 이상 장치가 어느 허브의 어느 포트에 연결되어 있는지 걱정할 필요가 없다는 추가 이점이 있습니다. 케이블의 RJ-45 끝을 예상하는 장치에 연결하거나 필요한 경우 server.cf를 수정하여 이동하면 됩니다. 다른 장치에 연결해야 합니다.

조언해 주셔서 감사합니다. 그들은 내가 해결책을 찾는 데 큰 도움을 주었지만, 끝까지 도달하지는 못했습니다. 다른 Protector 사용자들도 이것이 유용하다고 생각하기를 바랍니다.

관련 정보