I want my raspberry pi 4 running ubuntu 22.04 server to recognize TEL0150 CAN USB module from DFrobots and create and bring up slcan0 interface when device plugged in. Shell scripts work if i run it in terminal with passing ttyACM0, but when triggered from udev it creates interface and brings it up for 3-7 seconds and then in the journalctl i can see that Link DOWN Lost carrier.
I started to do this as a hobby project. Quite steep learning curve for me. I would be glad if someone would help me
I wrote shell script if run from terminal with passing the ttyACMx /usr/local/bin/slcan_add.sh ttyACM0
it creates and brings up the slcan0
interface.
#!/bin/sh
# Bind the CAN UART/USB device
echo "slcan_add.sh: Started with parameter $1" | /usr/bin/logger
sleep 2
sudo slcand -o -c -f -s4 /dev/$1
echo "slcand output: $?"
sleep 2
sudo ip link set slcan0 up
echo "slcan_add.sh: Completed" | /usr/bin/logger
Then I wrote udev rule that works but only for 3 seconds.
# DFrobot CAN BUS to UART/USB
ACTION=="add", ENV{ID_MODEL}=="Can_To_TTL", ENV{SUBSYSTEM}=="tty", RUN+="/usr/bin/logger [udev] DFrobot CAN UART/USB detected - running slcan_add.sh!", RUN+="/usr/local/bin/slcan_add.sh $kernel"
ACTION=="remove", ENV{ID_MODEL}=="Can_To_TTL", ENV{SUBSYSTEM}=="usb", RUN+="/usr/bin/logger [udev] DFrobot CAN UART/USB - running slcan_remove.sh!", RUN+="/usr/local/bin/slcan_remove.sh"
After 3 second of interface being up using journalctl -f
i can see folowing messages:
May 24 11:36:32 pi kernel: usb 1-1.3: new full-speed USB device number 27 using xhci_hcd
May 24 11:36:33 pi kernel: usb 1-1.3: New USB device found, idVendor=3343, idProduct=8096, bcdDevice= 1.00
May 24 11:36:33 pi kernel: usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
May 24 11:36:33 pi kernel: usb 1-1.3: Product: Can To TTL
May 24 11:36:33 pi kernel: usb 1-1.3: Manufacturer: DFRobot
May 24 11:36:33 pi kernel: usb 1-1.3: SerialNumber: TEL0150
May 24 11:36:33 pi kernel: cdc_acm 1-1.3:1.0: ttyACM1: USB ACM device
May 24 11:36:33 pi root[2681]: [udev] DFrobot CAN UART/USB detected - running slcan_add.sh!
May 24 11:36:33 pi root[2684]: slcan_add.sh: Started with parameter ttyACM1
May 24 11:36:35 pi sudo[2686]: root : PWD=/ ; USER=root ; COMMAND=/usr/bin/slcand -o -c -f -s4 /dev/ttyACM1
May 24 11:36:35 pi sudo[2686]: pam_unix(sudo:session): session opened for user root(uid=0) by (uid=0)
May 24 11:36:35 pi slcand[2687]: starting on TTY device /dev/ttyACM1
May 24 11:36:35 pi slcand[2687]: attached TTY /dev/ttyACM1 to netdevice slcan0
May 24 11:36:35 pi sudo[2686]: pam_unix(sudo:session): session closed for user root
May 24 11:36:35 pi networkd-dispatcher[703]: WARNING:Unknown index 13 seen, reloading interface list
May 24 11:36:35 pi systemd-udevd[2680]: Using default interface naming scheme 'v249'.
May 24 11:36:37 pi sudo[2694]: root : PWD=/ ; USER=root ; COMMAND=/usr/sbin/ip link set slcan0 up
May 24 11:36:37 pi sudo[2694]: pam_unix(sudo:session): session opened for user root(uid=0) by (uid=0)
May 24 11:36:37 pi systemd-networkd[682]: slcan0: Link UP
May 24 11:36:37 pi systemd-networkd[682]: slcan0: Gained carrier
May 24 11:36:37 pi sudo[2694]: pam_unix(sudo:session): session closed for user root
May 24 11:36:37 pi root[2697]: slcan_add.sh: Completed
May 24 11:36:37 pi snapd[709]: hotplug.go:200: hotplug device add event ignored, enable experimental.hotplug
May 24 11:36:41 pi systemd-networkd[682]: slcan0: Link DOWN
May 24 11:36:41 pi systemd-networkd[682]: slcan0: Lost carrier
What could be cause of interface going down and how to fix it and how to write udev rule correctly in this scenario?
Emīls Zdanovskis is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.