Правило Udev для создания узла для символьного устройства при загрузке модуля

Я следовал инструкциям, чтобы это произошло, но мне не удалось. Моя система Ubuntu 14.04 с ядром 3.18.0-031800-generic, Я искал ключи правил udev, используя udevadm monitor --env, Его вывод генерируется rmmod module_name было

KERNEL[202.017039] remove /module/module_name (module)
ACTION=remove
DEVPATH=/module/module_name
SEQNUM=2052
SUBSYSTEM=module

UDEV [202.018837] remove /module/module_name (module)
ACTION=remove
DEVPATH=/module/module_name
SEQNUM=2052
SUBSYSTEM=module
USEC_INITIALIZED=17116

Поэтому я создал сценарии (и пометил их как исполняемые для всех) для создания и удаления узла:

$ cat /usr/share/another_folder/make_node.sh
#!/bin/sh
mknod /dev/device_name c 89 1

$ cat /usr/share/another_folder/rm_node.sh
#!/bin/sh
rm /dev/device_name

И правило udev, которое использует их:

$ cat /etc/udev/rules.d/89-the-name.rules
SUBSYSTEM=="module", DEVPATH=="/module/module_name", ACTION=="add", RUN+="/usr/share/another_folder/make_node.sh"

SUBSYSTEM=="module", DEVPATH=="/module/module_name", ACTION=="remove", RUN+="/usr/share/another_folder/rm_node.sh"

... но он не работает, когда я смотрю (даже после перезапуска udev или перезагрузки системы). dmesg ничего не показывает по делу:

$ dmesg |grep udev
[    0.928948] systemd-udevd[121]: starting version 204    
[    5.155707] systemd-udevd[316]: starting version 204

Что мне не хватает?

1 ответ

Чтобы увидеть, что происходит, вы можете запустить

sudo udevadm monitor

в одном терминале, а затем вызвать нужное событие с

sudo udevadm trigger --action=add --subsystem-match=module

Монитор покажет события, увиденные udev.

Ваша проблема, вероятно, в том, что в ваших сценариях mknod а также rm не найдены, так как никакой путь не установлен udev. Используйте абсолютные пути или установите PATH в начале сценариев.

Другие вопросы по тегам