我的 Raspberry Pi 上连接了 2 个 UCANDEVICE USB 适配器。当我连接这 2 个设备时,它们在/dev
(ttyACM0
和)中可见ttyACM1
。
为了清楚地识别每个加密狗,我有以下 udev 规则:
SUBSYSTEMS=="usb", ATTRS{manufacturer}=="CANDevices", PROGRAM="/usr/bin/can-device-namer.py /dev/%k", SYMLINK+="CAN-%c"
其中can-device-namer.py
是连接ttACMx
并返回加密狗序列号的脚本。
这条规则非常有效,现在我将我的两个 UCANDEVICES 重命名为/dev
CAN-N16014350
CAN-N1613434B
现在我想自动启动一项开始启动slcand
的服务。CAN0
CAN1
为此,我修改了 udev 规则,如下所示:
SUBSYSTEMS=="usb", ATTRS{manufacturer}=="CANDevices", PROGRAM="/usr/bin/can-device-namer.py /dev/%k", SYMLINK+="CAN-%c", TAG+="systemd", ENV{SYSTEMD_WANTS}="slcand@%k.service"
我的[email protected]
样子是这样的:
[Unit]
Description=Serial CAN daemon (can-utils)
BindsTo=dev-%i.device
After=dev-%i.device
[Service]
Type=forking
StopWhenUnneeded=yes
Environment=SLCAND_OPTS="-o -c -s6" SLCAND_DEV=can0
EnvironmentFile=-/etc/default/slcand
EnvironmentFile=-/etc/sysconfig/slcand
ExecStart=/usr/bin/slcand $SLCAND_OPTS %I $SLCAND_DEV
ExecStartPost=/bin/sh -c '/bin/sleep 3; /sbin/ip link set $SLCAND_DEV up'
我的问题是,[email protected]
开头为ttyACM0
,我想使用使用 SIMLINK 规则(例如/dev/CAN-N16014350
)给出的名称来确保/dev/CAN-N16014350
始终以CAN0
和/dev/CAN-N1613434B
开头CAN1
。
CAN0
我的最终目标是当连接带有SN N16014350的UCANDEVICE和CAN1
连接带有SN N1613434B的UCANDEVICE时自动启动。
目前我只有 2 个加密狗,但它也适用于 3 或 4 个。也许我必须定义一个配置文件,其中包含设备名称和 CAN 名称之间的分配。
感谢您的帮助 :)