Почему udev не создает символическую ссылку на устройство?

Вопрос или проблема

У меня есть устройство, подключенное через USB:
Bus 001 Device 009: ID 18d1:4ee4 Google Inc. Nexus 4 (debug + tether)
Я попытался добавить оба:
ACTION=="add", ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="4ee4", SYMLINK+="pinpad"
и
SUBSYSTEM=="tty", ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="4ee4", SYMLINK+="pinpad" в /etc/udev/rules.d/99-payment-devices.rules для этого устройства.

После создания правила я выполняю udevadm control --reload-rules && udevadm trigger. Тем не менее, символическая ссылка pinpad не появляется в /dev. Она также не отображается в /dev в каком-либо другом виде.
Что может быть не так и как это исправить?

Вам нужно объединить действие add и подсистему в одной строке; более того, если вы используете USB, параметр SUBSYSTEM должен быть usb; вы пробовали с этой строкой?:

ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="4ee4", SYMLINK+="pinpad"

.

Ответ или решение

Проблема с отсутствием символической ссылки на устройство в udev может иметь несколько причин, и важно учитывать все аспекты конфигурации и окружения. Давайте разберем возможные причины возникновения данной ситуации, а также способы их решения.

1. Неверная конфигурация правила udev

Вы правильно указали, что для корректной работы udev важно правильно сформулировать правила. В вашем случае, для устройства USB следует использовать не только ACTION=="add", но и соответствующий SUBSYSTEM. Правильный вариант правила может выглядеть так:

ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4ee4", SYMLINK+="pinpad"

Здесь SUBSYSTEM=="usb" указывает на то, что правило применяется к USB-устройствам, что особенно важно для вашего Nexus 4.

2. Проблемы с авторизацией

В некоторых системах правила udev могут быть связаны с правами пользователя и необходимостью административного доступа. Убедитесь, что вы запускаете все команды, относящиеся к udev, от имени пользователя с достаточными привилегиями (обычно это пользователь root).

3. Проверка правильности применения правил

После изменения конфигурационного файла и перезагрузки udev, рекомендуется выполнить следующие проверки:

  • Убедитесь, что ваше новое правило загружено. Используйте команду:

    udevadm control --reload-rules
    udevadm trigger

    Это заставляет udev заново обработать текущие устройства.

  • Проверьте наличие ошибки в синтаксисе ваших правил. Можно использовать команду:

    udevadm test /sys/class/tty/ttyUSB0

    Замените ttyUSB0 на путь к вашему устройству, чтобы проверить, какие правила udev применяются и нет ли ошибок.

4. Проверка состояния устройства

После выполнения вышеуказанных команд проверьте, действительно ли ваше устройство появилось в /dev, а также выполните:

ls -l /dev/pinpad

Если ссылки нет, возможно, устройство не попадает под ваши критерии поиска. Для диагностики можно использовать:

udevadm info --query=all --name=/dev/ttyUSB0

На выходе вы получите информацию о свойствах устройства, что может помочь в выявлении проблемы.

5. Интеграция с другими подсистемами

В некоторых случаях другие подсистемы (например, NetworkManager, Systemd) могут конфликтовать с udev. Убедитесь, что ваше устройство не обрабатывается другими компонентами системы.

Заключение

Если после выполнения всех вышеозначенных шагов проблема не разрешится, возможно, стоит логировать действий udev для дальнейшего анализа. Пересмотрите ваши правила на наличие конфликтов и убедитесь в правильности всех подключенных устройств. С помощью глубокого анализа и корректировок важно найти подходящее решение, чтобы udev успешно создавал необходимые символические ссылки для вашего устройства.

Оцените материал
Добавить комментарий

Капча загружается...