起動時にUSBデバイスを固定アドレスにマッピングする

起動時にUSBデバイスを固定アドレスにマッピングする

マイコンピュータに複数のUSBデバイスが接続されています。

  1. FT232ベースのUSB-UARTコンバータ:シリアルプロトコルを使用してマイクロコントローラとコンピュータ間でデータを送受信するために使用されます。
  2. YDLidar TG15:環境図を描画するために使用されます。製品ページ

NUCでLubuntu 22.04 LTSを実行しています。

コンピュータが起動するたびに、dev/ttyUSB0cp210xシリアルコンバータを使用してFT232ベースのデバイスをYDLidarに割り当てることができます。dev/ttyUSB1私が望む構成は次のとおりです。

$ sudo dmesg | grep tty
[    0.095479] printk: console [tty0] enabled
[    6.046918] usb 1-3: FTDI USB Serial Device converter now attached to ttyUSB0
[   57.282034] usb 1-4: cp210x converter now attached to ttyUSB1

次のいくつかのリソースをオンラインでフォローすることができました。これこれこれ、以下のように私のユースケースのカスタムルールを作成するのに役立ちました。

$ cat /etc/udev/rules.d/34-usb-serial.rules 
# Assign FTDI chips to /dev/ttyFTDI
SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", SYMLINK="ttyUSB0"
# Assign Silicon Labs UART converters to /dev/ttyUSB1
SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", SYMLINK="ttyUSB1"

質問:

  1. udevadmリロードルールがトリガされても、起動後にアドレスは変更されません。私は使う
sudo udevadm control --reload-rules
sudo udevadm trigger

ルールを再ロードします。その後、ルールをロードする必要があり、ロードできない場合は文句を言う必要があります。そうですか?ただし、この代替方法が機能しない場合、エラーは発生しません。単にcp210xデバイスをとして指定ttyUSB0し、FTDIデバイスをとして指定しますttyUSB1。これはまたやってみるとsudo dmesg | grep ttyわかりますね。

  1. 私が書いたudevルールの使い方適切に起動時にこれらのデバイスに適切なIDを割り当てますか?

添付:この場合、「適切」と見なされることがあいまいな場合は、これらのファイルを編集するときに従う「ベストプラクティス」をできるだけ密接に従い、強力な方法で動作することを望みます。

よろしくお願いします!

答え1

USBシリアルコンバータユニットの標準名と重複しているか、SYMLINK="ttyUSB0"使用できない場合があります。SYMLINK="ttyUSB1"

現代的なudev実装では、次のことは不可能です。書く標準名ですが、自分で作成できます。追加シンボリックリンク。

目的に応じて、カスタム装置ノードの名前を指定する必要があります。

# FTDI serial converter for microcontroller
SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", SYMLINK+="ttyUSBmc"

# Silicon Labs serial converter for LIDAR
SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", SYMLINK+="ttyUSBlidar"

これらの規則に従って、シリアルコンバータは実際のデバイス名と/dev/ttyUSB0/dev/ttyUSB1起動時に検出される順序を取得しますが、/dev/ttyUSBmc常にFTDIシリアルコンバータを指し、/dev/ttyUSBlidarSilicon Labsシリアルコンバータを指すシンボリックリンクになります。 。

また、これらのudevルールを作成した後、initramfsファイルを再構築する必要があります。 USBシリアルコンバータ用のドライバは、実際のルートファイルシステムがマウントされる前に起動プロセスの初期にロードされる可能性があります。

initramfsを更新すると、最も古いドライバがロードされたときに追加されたudevルールのコピーが存在することを保証できます。

関連情報