/dev/ttyUSBデバイスを特定の定数デバイス番号に設定するにはどうすればよいですか?

/dev/ttyUSBデバイスを特定の定数デバイス番号に設定するにはどうすればよいですか?

複数のシリアルUSBリンクが接続されている複数のLinuxサーバーホストを使用します。 /dev/ttyUSBx デバイスのように見えます。ここで x は 0 から始まる数値です。クライアントデバイスは頻繁に再起動したり、オフラインになったり、プラグが抜かれたり、新しいデバイスが追加されたりします。これにより、各新しいクライアントが未使用の最下位番号を使用するため、ttyUSB デバイス番号が変更され続けます。

どういうわけか、クライアントデバイスが定数を持つように設定できますか?たとえば、クライアントAはttyUSB0、クライアントBはttyUSB1などになります。クライアントAがオフラインになり、クライアントBが再起動すると、ttyUSB1にオンラインに戻り、ttyUSB0はありません(オフラインだったため)。

PS:ホストはDebianまたはUbuntuで、主にDebianです。

ベストアンサー1

この場合、役に立つ2つの解決策があります。

  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、およびシリアル番号を検索し、必要なものと一致することを確認してから、アプリケーションでデバイスを使用します。

おすすめ記事