我有一套相当简单的定制规则:
ACTION=="add", SUBSYSTEM=="usb", ENV{ID_MODEL_ID}=="0748", ENV{ID_VENDOR_ID}=="05e3", TAG+="my-card-reader"
TAGS=="my-card-reader", ENV{DEVTYPE}=="disk", ENV{ID_INSTANCE}=="0:1", SYMLINK+="sdcard"
TAGS=="my-card-reader", ENV{ID_INSTANCE}=="0:1", ENV{DEVTYPE}=="partition", SYMLINK+="sdcard%n"
我正在尝试识别我的USB读卡器,然后在/dev中给出众所周知的/dev卡名。这套规则曾在16.04起作用,而在18.04则不起作用。
在检查udevadm monitor -p
时,我可以看到USB是被识别的:
UDEV [1832291.742219] add /devices/pci0000:00/0000:00:14.0/usb4/4-2 (usb)
ACTION=add
[…]
SUBSYSTEM=usb
TAGS=:my-card-reader:
[…]
但是,当我稍后使用udevadm info /sys/devices/pci0000:00/0000:00:14.0/usb4/4-2
检查sysfs路径时,我的标记就不再显示了--实际上,根本就没有可用的E: TAGS
条目。
对于其他设备,例如我的microSD卡上的分区,Ubuntu的默认systemd
标记仍然可用:
P: /devices/pci0000:00/0000:00:14.0/usb4/4-2/4-2:1.0/host3/target3:0:0/3:0:0:2/block/sdf
N: sdf
[…]
E: SUBSYSTEM=block
E: TAGS=:systemd:
[…]
我一直在运行udev_log="debug"
,同时拔出和回复阅读器和SD卡,突然,直到现在,我的规则被应用了一次。但是,查看来自udev的日记调试日志并进行比较,除了内核日志、udev守护进程日志和分叉udev工作程序以及seq编号之间的竞争之外,我看不到其他的区别。
我已经把问题减少了很多。当USB卡读取器在引导过程中附加时,标签就可用了。当我稍后(重新)附加它时,标签就丢失了。
我遗漏了什么?
发布于 2019-09-05 08:50:52
显然,有一件事正在发生:https://github.com/systemd/systemd/issues/7587
长话短说:标记只对每个事件有效,而不是持久化。从规则文件中删除ACTION=="add",
使其工作
发布于 2019-05-15 03:58:31
最有可能的是,该标记被另一条规则覆盖。
grep -r TAG
,请参见man udev
。udevadm test ...
和udevadm trigger ...
验证为该事件处理的规则。https://askubuntu.com/questions/1143191
复制相似问题