我创建了一个名为“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