Udev 规则启动服务

Udev 规则启动服务

我的 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的服务。CAN0CAN1

为此,我修改了 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 名称之间的分配。

感谢您的帮助 :)

相关内容