udevルールを使用してシンボリックリンクなしでUSBシリアルデバイスの永続名を設定する

udevルールを使用してシンボリックリンクなしでUSBシリアルデバイスの永続名を設定する

したがって、USBシリアルデバイスにはいくつかの問題があります。ラズベリーパイコンピューティングモジュールが起動すると、まずこの特定のUSBシリアルデバイスを列挙します。この特定のUSBシリアルデバイスは、他のUSBシリアルデバイスポート(後で作成されて表示される)と「衝突」します。モデム/ GPSの複数のポート。

したがって、デフォルトでUSBシリアルデバイスが接続されていない場合、ポートは次のようになります。

/dev/ttyUSB0 /dev/ttyUSB1 /dev/ttyUSB2 /dev/ttyUSB3

このUSBをシリアルデバイスに接続すると、次のように追加されます。

/dev/ttyUSB4

ただし、再起動またはシャットダウンしてからバックアップを開始すると、以前はttyUSB4でしたが、現在はttyUSB0のUSBシリアルデバイスを除いてリストに同じように表示されます。これはポートが「衝突」することを意味します。

次の行を追加してudev local.rulesファイルを編集してみました。

ACTION=="追加",ATTRS{idVendor}=="0403",ATTRS{idProduct}=="6015",SYMLINK+="usbgps"

私もこの行を試しましたが、うまくいかないようです。

アクション =="追加"、ATTRS{idVendor}=="0403"、ATTTRS{idProduct}=="6015"、NAME +="usbgps"

シンボリックリンクを生成する最初の行は、/ dev / usbgpsに新しいデバイス/リンクを作成します。

これは機能しますが、元のデバイスはそのまま残ります。つまり、usbgpsシンボリックリンクを作成しますが、/dev/ttyUSB4デバイスも作成します。再起動後、/dev/ttyUSB0と表示され、別のポートを「バンプ」して、私が持っている他のソフトウェアを混乱させます。

長期的には、私のソフトウェアがアクセスするデバイスに特定の静的名前を使用しようとします。問題は、ttyUSB0/1/2/3ポートがモデムメーカーの特別なドライバによって生成されることです。したがって、直接シンボリックリンクを使用して4つのUSBシリアルポートを表示できるようにコードを変更する必要があるかもしれません。つまり、ttyUSB2 は pppd/cellular 用なので cellport で名前を付け、ttyUSB1 は gps 用なので gpsport で名前を付けました。

ドライバを変更せずにttyUSB0/1/2/3ポートに直接シンボリックリンクを作成する方法を知っている人がいる場合は、教えてください。

だから私が尋ねるべき最後の質問は次のとおりです。

USBデバイスをttyUSB4またはttyUSB0ポート名で表示せずにusbgpsとして表示するにはどうすればよいですか?デバイスをusbgpsとしてマークしたいです。 ttyUSBデバイスのリストに追加されるのを防ぐことができれば、ポートがクラッシュし、特定の名前のポートに依存する他のアプリケーションが混乱するのを防ぐことができます。

答え1

まあ、この記事を見てその問題を解決したと思います。

USBシリアル「パス別」udevルールが機能しません。

接続されているすべてのコンピューティングモジュールを起動し、ポートが何を示すかを説明するポートを以下に示します。

ttyUSB0 -> USB GPS ttyUSB1 ->モデムポート0 ttyUSB2 ->モデムGPSポートttyUSB3 -> pppd用モデムセルラーポートttyUSB4 ->コマンドポートのモデム

次に、次のコマンドを実行して出力を記録します。

udevadm info /dev/ttyUSB0 | grep "ID_PATH="
udevadm info /dev/ttyUSB1 | grep "ID_PATH="
udevadm info /dev/ttyUSB2 | grep "ID_PATH="
udevadm info /dev/ttyUSB3 | grep "ID_PATH="
udevadm info /dev/ttyUSB4 | grep "ID_PATH="

このコマンドの出力は次のとおりです。

platform-fe980000.usb-usb-0:1.1:1.0
platform-fe980000.usb-usb-0:1.3:1.0
platform-fe980000.usb-usb-0:1.3:1.1
platform-fe980000.usb-usb-0:1.3:1.2
platform-fe980000.usb-usb-0:1.3:1.3

その後、この情報を記録し、/etc/udev/rules.d/local.rulesファイルに次の行を追加しました。将来的には、これらのルールを local.rules ファイルに入れるのではなく、同じ rule.d フォルダ内の別のルール ファイルに追加します。

SUBSYSTEM=="tty",ENV{ID_PATH}=="platform-fe980000.usb-usb- 
0:1.1:1.0",SYMLINK+="usbgps"
SUBSYSTEM=="tty",ENV{ID_PATH}=="platform-fe980000.usb-usb- 
0:1.3:1.0",SYMLINK+="modemport0"
SUBSYSTEM=="tty",ENV{ID_PATH}=="platform-fe980000.usb-usb- 
0:1.3:1.1",SYMLINK+="modemgpsport"
SUBSYSTEM=="tty",ENV{ID_PATH}=="platform-fe980000.usb-usb- 
0:1.3:1.2",SYMLINK+="modemcellularport"
SUBSYSTEM=="tty",ENV{ID_PATH}=="platform-fe980000.usb-usb- 
0:1.3:1.3",SYMLINK+="modemcommandport"

コンピューティングモジュールが起動すると、ttyUSB0/1/2/3/4/5ポートを移動できますが、シンボリックリンクはUSBデバイスのID_PATHを指すので、これは重要ではないようです.モジュールを再起動または終了して再起動すると、すべてが期待どおりに機能します。

たとえば、usbgpsポートでGPSデータを開いて表示したい場合です。

USB GPSデータを表示するために次のコマンドを実行したことがあります。

picocom /dev/ttyUSB0 -b 9600

これで同じコマンドを実行できますが、シンボリックリンクを指すようにすると完全に機能します。

picocom /dev/usbgps -b 9600

これが最善の解決策であるかどうかはわかりませんが、少なくともうまく機能するような解決策があります。

より良いソリューションのアイデアがあれば投稿してください。

関連情報