Mithilfe von udev soll die Funktion realisiert werden, dass sobald der UsbTuCan angesteckt wird, dieser auch als socketcan Device attached wird und beim abstecken automatisch wieder entfernt wird.
maxi@duplo:~/code/can-utils$ cat /etc/udev/rules.d/90-usb2can.rules
ACTION=="add", SUBSYSTEM=="tty", ATTRS{idVendor}=="4c54", ATTRS{idProduct}=="5543", RUN+="/usr/local/bin/slcan-udev"
ACTION=="remove", SUBSYSTEM=="tty", ENV{ID_VENDOR_ID}=="4c54", ENV{ID_MODEL_ID}=="5543", RUN+="/usr/local/bin/slcan-udev"
maxi@duplo:~/code/can-utils$ cat /usr/local/bin/slcan-udev
#!/bin/bash
# script to automatically configure slcan through udev
# (c) Maximilian Pachl, m@ximilian.info
# 2015-10-10
# -----------------------------------------------------
# configuration
# -----------------------------------------------------
LOG_FILE="/tmp/slcan.log"
PID_PREFIX="/var/run/slcan"
# -----------------------------------------------------
# helper functions
# -----------------------------------------------------
log()
{
echo "[$(date)] $1" >> $LOG_FILE;
}
get_tty()
{
echo $DEVNAME | awk -F "/" '{print $NF}'
}
# -----------------------------------------------------
# udev action handler
# -----------------------------------------------------
add()
{
TTY=$(get_tty)
log "new slcan compatible device $TTY found"
# attch tty to a slcan device
INTERFACE=$(slcan_attach -s8 -o $DEVNAME | awk 'NF>1{print $NF}')
# start the slcan userspace daemon
slcand $TTY $INTERFACE
echo $(pgrep -f "slcand $TTY $INTERFACE") > $PID_PREFIX-$TTY
# bring interface up
ifconfig $INTERFACE up
log "succesfully configured $TTY as $INTERFACE"
}
remove()
{
TTY=$(get_tty)
log "slcan device $(get_tty) removed"
PID=$(cat "$PID_PREFIX-$TTY")
kill $PID
rm $PID_PREFIX-$TTY
log "successfully removed $TTY, stopped $PID"
}
# -----------------------------------------------------
# main
# -----------------------------------------------------
# check if all environment variables are supplied
if [ -z "$DEVNAME" ]; then
log "no DEVNAME name supplied"
exit 1
fi
if [ -z "$ACTION" ]; then
log "no ACTION supplied"
exit 1
fi
# process the action issued by udev
case "$ACTION" in
add) add;;
remove) remove;;
esac