マイコンピュータに複数のUSBデバイスが接続されています。
- FT232ベースのUSB-UARTコンバータ:シリアルプロトコルを使用してマイクロコントローラとコンピュータ間でデータを送受信するために使用されます。
- YDLidar TG15:環境図を描画するために使用されます。製品ページ
NUCでLubuntu 22.04 LTSを実行しています。
コンピュータが起動するたびに、dev/ttyUSB0
cp210xシリアルコンバータを使用して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"
質問:
udevadm
リロードルールがトリガされても、起動後にアドレスは変更されません。私は使う
sudo udevadm control --reload-rules
sudo udevadm trigger
ルールを再ロードします。その後、ルールをロードする必要があり、ロードできない場合は文句を言う必要があります。そうですか?ただし、この代替方法が機能しない場合、エラーは発生しません。単にcp210xデバイスをとして指定ttyUSB0
し、FTDIデバイスをとして指定しますttyUSB1
。これはまたやってみるとsudo dmesg | grep tty
わかりますね。
- 私が書いた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/ttyUSBlidar
Silicon Labsシリアルコンバータを指すシンボリックリンクになります。 。
また、これらのudevルールを作成した後、initramfsファイルを再構築する必要があります。 USBシリアルコンバータ用のドライバは、実際のルートファイルシステムがマウントされる前に起動プロセスの初期にロードされる可能性があります。
initramfsを更新すると、最も古いドライバがロードされたときに追加されたudevルールのコピーが存在することを保証できます。