Правило 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 в начале сценариев.