我按照教程操作,但失败了。我的系统是 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。