Sparkfun FTDIチップとArduino Unoに接続されたNeato XV-*LiDARデバイスがあります。予測できないほど割り当てられていない/dev/ttyUSB0
合計として表示されます/dev/ttyUSB1
。
だから私はこう書いています/etc/udev/rules.d/80-arduinouno.rules
:
SUBSYSTEM=="tty",
ATTRS{idProduct}=="7523", ATTRS{idVendor}=="1a86",
MODE="0666",
OWNER="pi", GROUP="pi",
SYMLINK+="arduinouno"
...そして/etc/udev/rules.d/90-neatolidar.rules
:
SUBSYSTEM=="tty", ENV(ID_SERIAL_SHORT)=="AL01OTZS",
ATTRS{idProduct}=="6001", ATTRS{idVendor}=="0403", ATTRS{serial}=="AL01OTZS",
MODE="0666", OWNER="pi", GROUP="pi",
SYMLINK+="neatolidar"
idProduct
idVendor
最初の行から取得
udevadm info --attribute-walk --name=/dev/ttyUSB1 | grep idProduct
そして
udevadm info --attribute-walk --name=/dev/ttyUSB1 | grep idVendor
出力をそれぞれlsusb
。IS_SERIAL_SHORT
出力から取得します。
udevadm info -q all -n /dev/ttyUSB0 | grep ID_SERIAL
または
udevadm info --attribute-walk --name=/dev/ttyUSB0 | grep {serial}
ただし、このコマンドはFTDI / LiDARで動作しますが、Arduinoでのみ提供されていますID_SERIAL
。ID_SERIAL_SHORT
sudo service udev restart
監視中にデバイスを接続して切断しようとすると、最後に接続したデバイスと両方のデバイスへのシンボリックリンクが表示されることがwatch 'ls -lah /dev | grep ">"'
あります。つまり、これまで私はとを見ました。ただし、プラグを抜いて再接続すると、両方ともその状態に切り替わります。arduinouno
neatolidar
ttyUSB*
arduinouno -> ttyUSB1
neatolidar -> ttyUSB1
ttyUSB0
私のudevルールがこれら2つのデバイスを区別し、正しいデバイスが検出された場合にのみ実行されるようにするにはどうすればよいですか?
重要な場合は、Raspbian Jessieを実行しているRaspberry Pi 3にあります。 ArduinoはRPiに直接接続されていますが、FTDI安い黄色に接続EagleTec 4ポートUSBハブ。
答え1
私の評判はコメントを残すほど高くなかったようです。
また、次のbashスクリプトを使用してudevルールを再ロードして再起動するため、デバイスを切断して再接続する必要もありません。
#!/bin/bash
sudo udevadm control --reload-rules
sudo udevadm trigger
答え2
実行しsudo udevadm control --log-priority=info
、出力を観察した後、tail -f /var/log/syslog
いくつかのエラーが見つかりました。
Jan 23 21:22:05 raspberrypi systemd-udevd[1587]: invalid key/value pair in file /etc/udev/rules.d/80-arduinouno.rules on line 1,starting at character 17 ('\n') Jan 23 21:22:05 raspberrypi systemd-udevd[1587]: invalid key/value pair in file /etc/udev/rules.d/80-arduinouno.rules on line 2,starting at character 50 ('\n') Jan 23 21:22:05 raspberrypi systemd-udevd[1587]: invalid key/value pair in file /etc/udev/rules.d/80-arduinouno.rules on line 3,starting at character 12 ('\n') Jan 23 21:22:05 raspberrypi systemd-udevd[1587]: invalid key/value pair in file /etc/udev/rules.d/80-arduinouno.rules on line 4,starting at character 23 ('\n')
そして
Jan 23 21:23:01 raspberrypi systemd-udevd[1646]: unknown key 'ENV(ID_SERIAL_SHORT)' in /etc/udev/rules.d/90-neatolidar.rules:1
Jan 23 21:23:01 raspberrypi systemd-udevd[1646]: invalid rule '/etc/udev/rules.d/90-neatolidar.rules:1'
Jan 23 21:23:01 raspberrypi systemd-udevd[1646]: invalid key/value pair in file /etc/udev/rules.d/90-neatolidar.rules on line 2,starting at character 77 ('\n') Jan 23 21:23:01 raspberrypi systemd-udevd[1646]: invalid key/value pair in file /etc/udev/rules.d/90-neatolidar.rules on line 3,starting at character 36 ('\n')
ENV(ID_SERIAL_SHORT)
(1)私の規則が機能せず、(2)改行文字があってはならないという結論が出てきます。だから私は.rulesファイルを次の行に変更しました。
/etc/udev/rules.d/80-arduinouno.rules
:
SUBSYSTEM=="tty", ATTRS{idProduct}=="7523", ATTRS{idVendor}=="1a86", MODE="0666", OWNER="pi", GROUP="pi", SYMLINK+="arduinouno"
そして/etc/udev/rules.d/90-neatolidar.rules
:
SUBSYSTEM=="tty", ATTRS{idProduct}=="6001", ATTRS{idVendor}=="0403", ATTRS{serial}=="AL01OTZS", MODE="0666", OWNER="pi", GROUP="pi", SYMLINK+="neatolidar"
これは再起動後(または単におよびsudo service udev restart
/または)動作するようです。sudo udevadm control --reload