物理USBポートの永続名

物理USBポートの永続名

私はIMU、GPS、および2つのLIDARに接続されたモバイルデバイスでUbuntu Mateと一緒にRaspberry Pi 3 Model Bを使用しています。

Ubuntu 16.04.2
カーネルバージョン4.4.38-v7+

電源が投入された後、デバイスが起動し、ドライバとプログラムを実行してデータをサンプリングします。これらのプログラムは、デバイスのポート(ttyUSB *またはシンボリックリンク)を事前に割り当てる必要があります。

起動するたびに、USBデバイスは一致するランダムなttyUSB *を選択します。これは、一意のシリアルIDなどを持つIMUおよびGPSに適しています。ただし、LIDARデバイスはすべて同じUART-USBチップを使用し、互いに区別することはできません。

LSSB:

バス 001 デバイス 005: ID 0403:6014 Future Technology Devices International, Ltd FT232H シングル HS USB-UART/FIFO I2C
バス 001 デバイス 004: ID 06c2:0033 Phidg​​ets Inc. (以前 GLAB)
バス 001 デバイス 007: ID 10c4:ea60 Cygnal Integrated Products, Inc. CP210x UARTブリッジ/myAVR mySmartUSBインジケータ
バス 001 デバイス 006: ID 10c4: ea60 Cygnal Integrated Products, Inc. CP210x UARTブリッジ/myAVR mySmartUSBインジケータ
バス 001 デバイス 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514高速イーサネットアダプタバス
001デバイス002:ID 0424:9514 Standard Microsystems Corp。 SMC9514ハブバス
001デバイス001:ID 1d6b:0002 Linux Foundation 2.0ルートハブ

どのように区別できるかを調べるために、デバイス情報を比較してみました。

diff <(udevadm 情報 - 名前 /dev/ttyUSB1) <(udevadm 情報 - 名前 /dev/ttyUSB2)

1,2c1,2
- P: /devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2/1-1.2:1.0/ttyUSB1/tty/ttyUSB1
- N: ttyUSB1
---
+ P: /devices/プラットフォーム/soc/3f980000.usb/usb1/1-1/1-1.3/1-1.3:1.0/ttyUSB2/tty/ttyUSB2
+ N: ttyUSB2

4,7c4,7
- S: シリアル/パス/プラットフォーム-3f980000.usb-usb-0:1.2:1.0-port0
- E: DEVLINKS=/dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0 /serial/by-path/platform-3f980000.usb-usb-0:1.2:1.0-port0
- E: DEVNAME=/dev/ttyUSB1
- E: DEVPATH=/devices/platform/soc/3f980000.usb/usb1 /1 -1/1-1.2/1-1.2:1.0/ttyUSB1/tty/ttyUSB1
---
+ S: シリアル/パス別/プラットフォーム-3f980000.usb-usb-0:1.3:1.0-port0
+ E: DEVLINKS=/ dev/serial/by-path/platform-3f980000.usb-usb-0:1.3:1.0-port0 /dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0001-if00-port0 + E
:VNAME
: DEVPATH=/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.3/1-1.3:1.0/ttyUSB2/tty/ttyUSB2

14,15c14,15
- E: ID_PATH=platform-3f980000.usb-usb-0:1.2:1.0
- E: ID_PATH_TAG=platform-3f980000_usb-usb-0_1_2_1_0
---
+ E: ID_PATH=platform03f9 -0:1.3:1.0
+ E: ID_PATH_TAG=platform-3f980000_usb-usb-0_1_3_1_0

28c28
- E: 10 進数=1
---
+ E: 10 進数=2

31c31
- E: USEC_INITIALIZED=4706121921
---
+ E: USEC_INITIALIZED=4706424041

このステップでやりたいことは、Raspberry Piの各物理USBポートに永続名を割り当てて、デバイスが正しいソケットに接続されている限り機能するようにすることです。私は多くのルールを試しましたが、成功しませんでした。さまざまな組み合わせ:

kernel=="ttyUSB*", kernel=="1-1.2", name="ttyUSB0", mode="0666" kernel=="ttyUSB*", kernel=="1-1.2:1.0", name=" ttyUSB0",MODE="0666" kernel=="ttyUSB*",kernel=="1-1.3",NAME="ttyUSB1",MODE="0666" kernel=="ttyUSB*",kernel=="1- 1.3:1.0", name="ttyUSB1", mode="0666" kernel=="ttyUSB*", kernel=="1-1.5", name="ttyUSB2", mode="0666" kernel=="ttyUSB* ", カーネル=="1-1.5:1.0", name="ttyUSB2", モード="0666"

ここでお勧めします。https://askubuntu.com/questions/49910/how-to-distinguish- Between-identical-usb-to-serial-adapters

udevadm情報の他の唯一の違いはMINOR属性のようですが、この情報の使用方法を理解できませんでした。これまで私の最善の推測は次のとおりです。

SUBSYSTEM=="tty",ATTRS{idVendor}=="10c4",ATTRS{idProduct}=="ea60",ATTRS{minor}=="1",SYMLINK+="rplidar1"
SUBSYSTEM=="tty" ,ATTRS {idVendor}=="10c4",ATTRS{idProduct}=="ea60",ATTRS{minor}=="2",SYMLINK+="rplidar2"

しかし、それもうまくいかないようです(私はMINORとMinorも試しました)。

ベストアンサー1

解決策が見つかりました。次のルールは、特定のデバイスの対応するUSB​​ポートにシンボリックリンクを割り当てます。 idVendorおよびidProduct用語を削除することもできます。

サブシステム == "tty", カーネル == "1-1.2", ATTRS {idVendor} == "10c4", ATTRS {idProduct} == "ea60", SYMLINK+="rplidar1"
サブシステム == "tty" ,カーネル= "1-1.3", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", SYMLINK+="rplidar2"

おすすめ記事