加载模块时为字符设备创建节点的udev规则

加载模块时为字符设备创建节点的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"

...但是当我 lo 时它不起作用(即使重新启动 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您的问题可能是由于 udev 没有设置 PATH ,因此在脚本中rm找不到 和 。请使用绝对路径名或在脚本开始时设置 PATH。

相关内容