udev rules 编写,关联,device,linux,systemd
- 参考
- How to Execute a Shell Script When a USB Device Is Plugged
- How to execute a shellscript when I plug-in a USB-device
- An introduction to Udev: The Linux subsystem for managing device events
- UDEV RULES
- Beginners Guide to Udev in Linux
- Debian Wiki - udev - Linux dynamic device management
- ArchLinux Wiki - udev
hello rules
以USB键盘为例:
-
lsusb
查看当前插入USB设备,可以看到厂商和产品代码1 2 3 4
$ lsusb Bus 001 Device 004: ID 8087:0aa7 Intel Corp. Wireless-AC 3168 Bluetooth Bus 001 Device 005: ID 046d:c52f Logitech, Inc. Unifying Receiver Bus 001 Device 002: ID 05ac:024f Apple, Inc. Aluminium Keyboard (ANSI)
其中,
Bus 001 Device 002:
就是一个键盘,厂家编码ATTRS{idVendor}
是05ac
,产品编码ATTRS{idProduct}
是024f
-
创建rules文件
sudo vim /etc/udev/rules.d/10-keyboard.rules
1
ATTRS{idVendor}=="152d", ATTRS{idProduct}=="2329", RUN+="/tmp/test.sh"
-
创建对应的rule触发时,执行的脚本
sudo vim /tmp/test.sh
这个脚本主要打印些设备信息,要加什么功能,可以自己添加,注意不要加耗时任务。
1 2 3 4 5 6 7 8
#! /bin/sh env >>/tmp/test.log file "/sys${DEVPATH}" >> /tmp/test.log if [ "${ACTION}" = add -a -d "/sys${DEVPATH}" ]; then echo "add ${DEVPATH}" >> /tmp/test.log fi
-
重载rules :
sudo udevadm control --reload-rules
-
在命令窗口开启监视:
sudo udevadm monitor
可以在命令开头加上 unbuffer :
unbuffer udevadm monitor
,这样的话,就不用到4K的缓冲慢了,才输入到命令行窗口。 -
手动触发,来测试 rules 和 脚本 :
sudo udevadm trigger
debug
查看日志
修改日志级别: udevadm control --log-priority=info
然后在 system log(journalctl -f
) 或者 kernel log(dmesg
)中看到所有日志。
-
如果要永久修改 log 级别 :
/etc/udev/udev.conf
保存了日志级别,默认是 error1 2 3 4
vi /etc/udev/udev.conf # edit the log level as described in "man udev.conf" systemctl restart systemd-udevd journalctl -f
查看 device 的信息
-
udevadm monitor
udev有变动,就会输出到命令行窗口。 ctrl + c 退出。 -
udevadm info
知道设备名称,查询设备相关信息: udevadm info --name /dev/sda1 --query all
知道设备path,查看设备所有相关属性: udevadm info --attribute-walk --path=/devices/pci0000:00/0000:00:01.2/0000:02:00.0/0000:03:05.0/0000:05:00.0/usb1/1-3/1-3:1.0
- 注意: 根据 /devcies/xxx 开头的path,在文件系统会 找不到文件,实际应该在
/sys
目录下找/sys/devices/xxxx