web-dev-qa-db-ja.com

Raspbian:/ dev / ttyUSB *を静的にマップします

Raspianを実行しているRaspberryPiを使用して、ホームオートメーションハードウェアを制御しています。 1つのハードウェアがRS232を介して通信するため、USB-RS232アダプターを使用してRPiに接続します。もう1つはUSB経由で接続しますが、シリアルポートをエミュレートします。

ハードウェアを1つだけ使用している場合は、すべて問題ありません。ソフトウェアに/dev/ttyUSB0を使用するように指示するだけで、すべて問題ありません。

問題は、両方を同時に接続する場合です。 1つのデバイスはttyUSB0として表示され、もう1つはttyUSB1として表示されます。これは問題ありませんが、RPiからプラグを抜かなくても、再起動するたびに、どのハードウェアデバイスがどのデバイスファイルに割り当てられるかは基本的にランダムです。

再起動後、間違ったデバイスと通信しているために制御ソフトウェアが混乱することがよくあります。デバイスをデバイスファイルに「ハードコーディング」する方法はありますか?

1
MiffTheFox

シリアルデバイスの場合、トポロジによって/dev/serial/by-path/の下に名前が付けられているので、同じUSBハブとポートを使用する場合は一定に保つ必要があります。例えば:

ls -l /dev/serial/by-path/pci-0000:04:00.0-usb-0:2.1.1:1.0-port0
... /dev/serial/by-path/pci-0000:04:00.0-usb-0:2.1.1:1.0-port0 -> ../../ttyUSB0

同様に、/dev/serial/by-id/の下に、シリアル番号を含む名前でデバイスを見つける必要があります。例:

 ls -l /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A5771WOA-if00-port0
 ... /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A5771WOA-if00-port0 -> ../../ttyUSB0
2
meuh

これにはudevルールを使用できます。 udevルールはシリアル番号でUSBデバイスと一致させることができ、/devでデバイスの代替名を作成できます。

/devに実際のデバイスノードを指すシンボリックリンクを作成するには、次のようなudevルールで十分です。

SUBSYSTEM=="usb", ATTRS{serial}=="<serial number>", SYMLINK+="USBserial1"

詳細については、Daniel Drakeによる devルールの記述 を参照してください。

1
Johan Myréen