Правило udev с аргументом KERNELS не работает

Для рекурсивного сопоставления часто используется find . Поскольку вы хотите сопоставить все файлы в текущем каталоге и его подкаталогах рекурсивно, но только до определенной глубины, укажите -maxdepth . Этого нет в POSIX , но он существует во всех текущих * BSD и в GNU find (Linux, Cygwin) и в Busybox (встроенный Linux), так что можно с уверенностью сказать, что он у вас есть. -exec… {} + - относительно недавнее дополнение к POSIX, но уже некоторое время оно присутствует в GNU и FreeBSD / NetBSD / OSX.

cd /srv/hg && find . -type d -maxdepth 3 -exec /usr/local/bin/hg-ssh {} +

(Я добавил -тип d , потому что вы, кажется, хотите сопоставить только каталоги, даже если ваша попытка с * * / * и т. Д. Соответствует файлам всех типов.)

0
06.06.2018, 00:40
1 ответ

Начальная загрузка

  • Вы не можете вычислять KERNELпри написании правила для USB-устройства, как написал @dirkt.
  • И, к сожалению, устройство не полностью -заполнено в «looking at device '/devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.3/ttyUSB19'» для правильного соответствия (, как вы можете видеть в своем вопросе ).
  • Но udevи другие ваши правила могут помочь! Однако udevadm infoраспечатает необработанную информацию об устройстве.udevadm monitor -u -pпечатает заполненную версию:

    udevadm monitor --help
    
    ...
    -p --property                            Print the event properties
    -k --kernel                              Print kernel uevents
    -u --udev                                Print udev events
    -s --subsystem-match=SUBSYSTEM[/DEVTYPE] Filter events by subsystem
    

Решение

Получить параметры

  1. Извлеките устройство
  2. запустите команду udevadm monitor -kups usbдля получения полностью -заполненных событий
  3. подключить для получения логов

Записать правило

У вас есть два варианта:

  1. Записать правило на основе исходного события KERNEL:

    ACTION=="add", SUBSYSTEM=="usb-serial", ENV{DEVTYPE}=="usb_device", \
      ENV{PRODUCT}=="403/6011/0", SYMLINK+="my_port"
    
  2. Правило записи на основе расширенного UDEVсобытия:

    ACTION=="add", SUBSYSTEM=="usb-serial", ENV{DEVTYPE}=="usb_device", \
      ENV{ID_VENDOR_ID}=="0403", ENV{ID_MODEL_ID}=="6011", SYMLINK+="my_port"
    

Тестовое правило

Вы должны проверить свое правило, чтобы избежать нежелательного поведения перед производством (, например. слишком широкое условие => несколько совпадений => несколько запусков)

  1. Возьмите путь к устройству из выходных данных предыдущего udevadm monitorзапуска (, например.:usb1/1-3в вашем случае)
  2. Запустите udevadm testдля сухой -запустите правила udev:

    udevadm test --action=add /sys/bus/usb/devices/usb1/1-3
    

Примените изменения и попробуйте

  1. Перезагрузить правила:

    udevadm control --reload
    
  2. Запуск USB-устройства по -подключению:

    udevadm trigger -v --action=add --subsystem-match /sys/bus/usb/devices/usb1/1-3
    
1
28.01.2020, 04:21

Теги

Похожие вопросы