как узнать, создал ли ядро ​​или udev узел устройства?

Есть ли способ узнать, кто создал узел устройства? Если это было udev или ядро?

В конкретном случае у меня есть две веб-камеры. Для них созданы /dev/video0 и /dev/video1 . К сожалению, это не постоянное задание. Теперь я подумал, что это будет иметь место при использовании udev , но когда я создаю правило udev мне кажется, что video0 и video1 уже созданы до того, как udev сможет назначить более постоянный узел, например /dev/videoLogitech .

  • переименование сетевых интерфейсов не работает должным образом. Где искать?
  • Узел устройства не создан
  • Какие udev-атрибуты действительно доступны во время горячего / холодного подключения?
  • Как я могу сделать правило udev с использованием серийного номера устройства «sibling» (для устройств USB без уникальных серий)?
  • Создание файлов устройств на диске в / dev / disk / by-path
  • 80-net-setup-link больше не работает, когда я понизил systemd
  • Я надеюсь получить некоторые предложения относительно того, какой файл журнала или какая команда может помочь мне узнать о том, что здесь происходит.

  • Правило Удева не работает над Debian
  • udev, как предотвратить дальнейшие правила?
  • Linux отключает / скрывает устройства mtdblock от lsblk
  • Проблемы с правилами udev для запуска сценария bash при отключении жесткого диска
  • постоянное имя сетевого интерфейса и kvm
  • В каком журнале я должен проверять ошибки udev?
  • One Solution collect form web for “как узнать, создал ли ядро ​​или udev узел устройства?”

    Если вы хотите проверить порядок действий, используйте:

     udevadm monitor --property 

    делая это, вы получаете список действий. Когда вы добавляете камеру, одна из первых записей, скорее всего, будет выглядеть примерно так:

     KERNEL[110935.814197] add /devices/.../video4linux/video1 (video4linux) ACTION=add DEVNAME=/dev/video1 <<<<---- devname 

    Как отметил @goldilocks :

    К сожалению, если вы используете systemd, то версия udev имеет сложную «постоянную схему именования», которая жестко закодирована в udevd , поэтому вы правы, просто rules.d вещи rules.d можно оставить много тайн.

    Также от man udev для systemd:

    Следующие ключи могут получить назначенные значения:

    NAME Имя, которое будет использоваться для сетевого интерфейса. См. Systemd.link (5) для механизма более высокого уровня для настройки имени интерфейса. Имя узла устройства не может быть изменено udev, могут создаваться только дополнительные символические ссылки.


    Именование и отладка

    Ваш лучший вариант, скорее всего, будет использовать что-то вроде:

     udevadm test $(udevadm info -q path -n video1) 

    Он дает вам «тестовый прогон» в вашем правиле (правилах) и сообщает о любых ошибках.

    После добавления / изменения правила не забудьте перезагрузить:

     udevadm control --reload-rules 

    Когда дело доходит до названия устройств, вы, вероятно, получите что-то вроде:

     NAME="smile2thecamera" ignored, kernel device nodes can not be renamed; please fix it in /etc/udev/rules.d/83-webcam.rules:6 

    Вместо этого вы можете использовать SYMLINK (если этого достаточно), как в:

     KERNEL=="video[0-9]", .... SYMLINK+="video-logitech" 

    Должно дать вам что-то подобное на тест:

     creating link '/dev/video-logitech' to '/dev/video1' creating symlink '/dev/video-logitech' to 'video1' DEVLINKS=.... /dev/video-logitech 
    Linux и Unix - лучшая ОС в мире.