/dev/ttyUSB 장치를 특정 상수 장치 번호로 어떻게 설정합니까?

/dev/ttyUSB 장치를 특정 상수 장치 번호로 어떻게 설정합니까?

여러 직렬-USB 링크가 연결된 여러 Linux 서버 호스트를 사용합니다. /dev/ttyUSBx 장치처럼 보입니다. 여기서 x는 0부터 시작하는 숫자입니다. 클라이언트 장치는 자주 재부팅되거나 오프라인 상태가 되거나 플러그가 뽑히거나 새 장치가 추가됩니다. 이로 인해 각각의 새 클라이언트가 사용되지 않은 가장 낮은 번호를 사용하므로 ttyUSB 장치 번호가 계속 변경됩니다.

어떻게든 클라이언트 장치가 상수를 갖도록 설정할 수 있습니까? 예를 들어 클라이언트 A는 ttyUSB0, 클라이언트 B는 ttyUSB1 등이 됩니다. 클라이언트 A가 오프라인이 되고 클라이언트 B가 재부팅되면 ttyUSB1로 다시 온라인 상태가 되고 ttyUSB0은 없습니다(오프라인이었기 때문).

추신: 호스트는 Debian 또는 Ubuntu이며 주로 Debian입니다.

답변1

이 경우 도움이 될 수 있는 두 가지 솔루션이 있습니다.

  1. udev 규칙을 편집하여 /dev/ttyClientA 및 /dev/ttyClientB와 같은 장치에 대한 심볼릭 링크를 생성하면 더 이상 ttyUSB 뒤의 접미사 번호에 대해 걱정할 필요가 없습니다.
  • 시스템에 설치된 장치를 확인하십시오.

      # lsusb
      Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
      Bus 001 Device 006: ID 04d8:0205 Microchip Technology, Inc. innodisk USB Dual CAN
      Bus 001 Device 005: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter 
      Bus 001 Device 004: ID 0483:5740 STMicroelectronics Virtual COM Port
      Bus 001 Device 002: ID 0403:6001 Future Technology Devices International, Ltd FT232 Serial (UART) IC
      Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    
  • 공급업체 ID, 제품 ID 및 일련번호를 가져옵니다. lsusb를 사용할 때 원하는 것과 일치하는지 확인하세요. 예를 들어 ttyUSB1을 사용하고 싶습니다.

      # TTYDEVICE="ttyUSB1" ; sudo echo -e "$(udevadm info -a -n /dev/${TTYDEVICE} | grep ATTRS{idVendor}) \n$(udevadm info -a -n /dev/${TTYDEVICE} | grep ATTRS{idProduct}) \n$(udevadm info -a -n /dev/${TTYDEVICE} | grep ATTRS{serial}) \n"
      ATTRS{idVendor}=="1a86"
      ATTRS{idVendor}=="1d6b"
      ATTRS{idProduct}=="7523"
      ATTRS{idProduct}=="0002"
      ATTRS{serial}=="0000:00:14.0"
    
  • 1d6b:0002는 시스템의 USB 허브 IC입니다. 우리는 udev 규칙을 공식화하기 위해 이를 사용하지 않습니다. /etc/udev/rules.d/99-usb-serial.rules 파일에 다음 줄을 추가합니다.

      SUBSYSTEM=="tty", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", ATTRS{serial}=="0000:00:14.0", SYMLINK+="ttyClientA"
    
  • udev를 다시 로드합니다. 이 단계 후에 장치는 /dev/ttyClientA여야 합니다.

      # sudo udevadm control --reload-rules && sudo udevadm trigger
    
  1. 옵션 1이 작동하지 않는 경우 이 솔루션을 사용할 수 있습니다. 옵션 1의 명령을 사용하여 모든 ttyUSBx 장치에서 공급업체 ID, 제품 ID 및 일련 번호를 검색하고 원하는 것과 일치하는지 확인한 다음 응용 프로그램에서 장치를 사용하십시오.

답변2

이는 불가능할 수도 있습니다. 하지만 장치가 나타나면 udev가 심볼릭 링크를 생성하도록 할 수 있습니다. 예를 /dev/ttyUSB0들어, 더 이상 다른 장치에 연결되지 않습니다 ./dev/ttyUSB-A

답변3

사용 가능한 직렬 장치 목록을 보려면 내용을 확인하세요 /dev/serial/by-id/. 예를 /dev/serial/by-id/usb-FTDI_FT230X_Basic_UART_D307YFO0-if00-port0들어 , 내 시스템에는 /dev/ttyUSB0.

관련 정보