USBをCAN Lawicellに接続するUdevルール

USBをCAN Lawicellに接続するUdevルール

Lawicel CANアダプタを使用してセンサーに接続しており、手動の缶設定を避けるためにudevルールを設定したいと思います。

マニュアルは次のように設定できます。

sudo slcand -o -c -f -s6 /dev/ttyUSB0 slcan0
sudo ifconfig slcan0 up

これを実行すると、candump slcan0データを印刷して接続が有効であることがわかります。

だから私はudevルール設定ガイドに従っています。協会。しかし、これはうまくいきません。 udevルールは

# Lawicel CANUSB module
ACTION=="add", ENV{ID_MODEL}=="CANUSB", ENV{SUBSYSTEM}=="tty", RUN+="/usr/bin/logger [udev] Lawicel CANUSB detected - running slcan_add.sh!", RUN+="/usr/local/bin/slcan_add.sh $kernel"
ACTION=="remove", ENV{ID_MODEL}=="CANUSB", ENV{SUBSYSTEM}=="usb", RUN+="/usr/bin/logger [udev] Lawicel CANUSB removed - running slcan_remove.sh!", RUN+="/usr/local/bin/slcan_remove.sh"

スクリプトslcan_add.sh

#!/bin/sh
# Bind the USBCAN device
slcand -o -c -f -s6 /dev/$1 slcan0
sleep 2
ifconfig slcan0 up 

その後、ルールを再ロードしてudevを再起動しましたが、次のものが返されtail -f /var/log/syslogました。

morten@thinkpad:~$ tail -f /var/log/syslog
Oct  7 10:56:21 thinkpad kernel: [ 1580.917239] usb 1-1: Detected FT232RL
Oct  7 10:56:21 thinkpad kernel: [ 1580.918002] usb 1-1: FTDI USB Serial Device converter now attached to ttyUSB0
Oct  7 10:56:21 thinkpad mtp-probe: checking bus 1, device 10: "/sys/devices/pci0000:00/0000:00:14.0/usb1/1-1"
Oct  7 10:56:21 thinkpad mtp-probe: bus: 1, device: 10 was not an MTP device
Oct  7 10:56:21 thinkpad root: [udev] Lawicel CANUSB detected - running slcan_add.sh!
Oct  7 10:56:21 thinkpad slcand[5967]: starting on TTY device /dev/ttyUSB0
Oct  7 10:56:21 thinkpad slcand[5968]: attached TTY /dev/ttyUSB0 to netdevice slcan0
Oct  7 10:56:21 thinkpad slcand[5968]: netdevice slcan0 renamed to slcan0
Oct  7 10:56:21 thinkpad NetworkManager[649]: <info>  [1633596981.6497] manager: (slcan0): new Generic device (/org/freedesktop/NetworkManager/Devices/8)
Oct  7 10:56:21 thinkpad systemd-udevd[5954]: ethtool: autonegotiation is unset or enabled, the speed and duplex are not writable.
Oct  7 10:56:23 thinkpad snapd[668]: hotplug.go:199: hotplug device add event ignored, enable experimental.hotplug
Oct  7 10:56:23 thinkpad mtp-probe: checking bus 1, device 10: "/sys/devices/pci0000:00/0000:00:14.0/usb1/1-1"
Oct  7 10:56:23 thinkpad mtp-probe: bus: 1, device: 10 was not an MTP device
Oct  7 10:56:26 thinkpad ModemManager[791]: <info>  [base-manager] couldn't check support for device '/sys/devices/pci0000:00/0000:00:14.0/usb1/1-1': not supported by any plugin
Oct  7 10:56:27 thinkpad gnome-shell[1997]: Removing a network device that was not added
Oct  7 10:56:27 thinkpad gnome-shell[1426]: Removing a network device that was not added

そしてcandump slcan0リターンSIOCGIFINDEX: No such device。この問題をどのように解決するのですか?

ノート:Ubuntu 20.04を使用しています。

編集する:udevルールがデバイスを正しく識別してスクリプトを実行するので、udevルールが機能する必要があると思います。 USBポートを手動で設定してシェルスクリプトを実行すると、sudo ./sclan_add.sh次のように動作します。tail -f /var/log/syslog

Oct  7 12:53:26 agrirobot slcand[20933]: starting on TTY device /dev/ttyUSB0
Oct  7 12:53:26 agrirobot slcand[20934]: attached TTY /dev/ttyUSB0 to netdevice slcan0
Oct  7 12:53:26 agrirobot slcand[20934]: netdevice slcan0 renamed to slcan0
Oct  7 12:53:26 agrirobot NetworkManager[649]: <info>  [1633604006.8360] manager: (slcan0): new Generic device (/org/freedesktop/NetworkManager/Devices/22)
Oct  7 12:53:26 agrirobot systemd-udevd[20936]: ethtool: autonegotiation is unset or enabled, the speed and duplex are not writable.

私は実際にシェルスクリプトを呼び出すudevルールに何が問題なのかわかりませんが、何らかの理由でこれが違いを生み出します。

ベストアンサー1

解決策は、部分的に以下からインスピレーションを得たものの組み合わせでした。これ

udevルール

# Lawicel CANUSB module
ACTION=="add", ENV{ID_MODEL}=="CANUSB", ENV{SUBSYSTEM}=="tty", RUN+="/usr/local/bin/slcan_add_wrapper.sh $kernel"

slcan_add_wrapper.sh

#!/bin/sh
#  Call shell script binding can device
/usr/bin/logger "[udev] Lawicel CANUSB detected - running /usr/local/bin/slcan_add.sh on $1"
echo /usr/local/bin/slcan_add.sh $1 | at now

slcan_add.sh

#!/bin/sh
# Bind the USBCAN device
sleep 1
/usr/bin/logger "binding $1 to slcan0"
slcand -o -c -f -s6 /dev/$1 slcan0
sleep 2
ifconfig slcan0 up

説明する

at解決策は、udev killスクリプトが時間がかかりすぎてスリープしなくても端末で手動で実行するsleepのを防ぐためのエクスプロイトの組み合わせです。しかし、何らかの理由で、udevルールは睡眠なしで実行を拒否し、理由を知らず、もはや望まない。これ。slcan_add.shslcan_add.sh

誰かがよりきれいな解決策を見つけたら、私はそれを受け入れるでしょう。

おすすめ記事