Вопрос или проблема
У меня есть устройство, подключенное через 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
успешно создавал необходимые символические ссылки для вашего устройства.