У меня есть довольно простой набор пользовательских правил:
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 и затем дать карте памяти microSD известные имена в/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:
[…]
Но когда я проверяю, что sysfs соединяют каналом позже с udevadm info /sys/devices/pci0000:00/0000:00:14.0/usb4/4-2
, мой ТЕГ больше не показывают — на самом деле, существует нет 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:
[…]
Обновление 1
Я работал с udev_log="debug"
при отключении и перевключении средства чтения и SD-карты, внезапно и до сих пор только однажды, мои правила были применены. Однако смотрение на journalctl отлаживает журналы от udev и сравнения, я не вижу различия кроме гонки между журналом ядра, udev журнал демона, и разветвленным udev рабочим, а также seq числами.
Обновление 2
Я в значительной степени уменьшил проблему. Тег доступен, когда картридер USB присоединяется во время начальной загрузки. Когда я (пере-) присоединяю его позже, тег отсутствует.
Что я пропускаю?
По-видимому, существует целая вещь, продолжающаяся: https://github.com/systemd/systemd/issues/7587
Длинная короткая история: ТЕГИ только допустимы на событие и не сохранились. Удаление ACTION=="add",
от моих правил файл заставил его работать
Скорее всего, этот тег был перезаписан другим правилом.
grep -r TAG
в папках системных правил, см. man udev
. udevadm test ...
и udevadm trigger ...
, чтобы проверить, какие правила обработаны для этого события.