udevルールは区別されません

udevルールは区別されません

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"

idProductidVendor最初の行から取得

udevadm info --attribute-walk --name=/dev/ttyUSB1 | grep idProduct

そして

udevadm info --attribute-walk --name=/dev/ttyUSB1 | grep idVendor

出力をそれぞれlsusbIS_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_SERIALID_SERIAL_SHORT

sudo service udev restart監視中にデバイスを接続して切断しようとすると、最後に接続したデバイスと両方のデバイスへのシンボリックリンクが表示されることがwatch 'ls -lah /dev | grep ">"'あります。つまり、これまで私はとを見ました。ただし、プラグを抜いて再接続すると、両方ともその状態に切り替わります。arduinounoneatolidarttyUSB*arduinouno -> ttyUSB1neatolidar -> ttyUSB1ttyUSB0

私の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

関連情報