udevadm 规则适用于“udevadm 测试”,但不适用于“udevadm 触发器”

udevadm 规则适用于“udevadm 测试”,但不适用于“udevadm 触发器”

我创建了一个名为“99-usb.rules”的简单规则,它只是命名特定设备的 tty 端口

KERNEL=="ttyACM*", ATTRS{idVendor}=="2341", NAME="mydevice"

当我使用以下命令运行 udevadm 测试时,此规则运行良好

udevadm test $(udevadm info -q path -n /dev/ttyACM0)

运行此命令会导致“/dev/mydevice”出现,我可以通过“mydevice”与我的 USB 设备通信。问题是,我无法在测试环境之外触发此规则。我尝试过“udevadm control -R”和“udevadm trigger”以及断开和重新连接设备并重新启动我的系统。有什么想法为什么“udevadm 触发器”会失败吗?我在操作系统 OpenWrt Barrier Breaker 14.07 上使用 udev 版本 173。

答案1

我的 Linux 系统上也有类似的问题。我最终发现该NAME选项的功能严重不足,因为它仅适用于网络接口。它对磁盘驱动器、TTY 和其他由内核管理的东西没有影响。您应该改为使用SYMLINK+=...创建到该设备的符号链接。我认为它更适合你的目的。

答案2

如果您来这里尝试让 EC2 NVME EBS 卷显示在 Ubuntu 上的 udev 中,请查看 AWS 在amazon-ec2-utils包中提供的规则/lib/udev/rules.d/70-ec2-nvme-devices.rules

# ebs nvme devices
ACTION=="add", KERNEL=="nvme[0-9]*n[0-9]*",        ENV{DEVTYPE}=="disk",      ATTRS{model}=="Amazon Elastic Block Store", PROGRAM="/sbin/ebsnvme-id -u /dev/%k", SYMLINK+="%c"
ACTION=="add", KERNEL=="nvme[0-9]*n[0-9]*p[0-9]*", ENV{DEVTYPE}=="partition", ATTRS{model}=="Amazon Elastic Block Store", PROGRAM="/sbin/ebsnvme-id -u /dev/%k", SYMLINK+="%c%n"

请注意ACTION==add,如上所述,默认触发操作 ( change) 不包含此内容。改为这样触发:

udevadm trigger \
  --action add \
  --settle

相关内容