我的规则有些问题udev
。目前,我已将 udev 规则设置为每当 Android 手机连接到计算机上的任何 USB 端口时执行脚本。但我不希望从每个 USB 端口执行该脚本。我只希望当手机连接到第 4 个 USB 端口时执行该脚本,而当手机连接到第 1 个、第 2 个或第 3 个 USB 端口时不应发生任何事情。
我如何实现这一点以及如何确定例如第 4 个 USB 端口?
我将非常感谢您的帮助。
我当前的 udev 规则:
KERNELS="1-2:1.1", ACTION=="add", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}!="1d6b", ATTRS{idVendor}!="203a", ATTRS{idVendor}=="****", ATTRS{idProduct}=="****", RUN+="/usr/local/bin/tmp.sh $attr{serial}"
答案1
一般来说,任何插入的设备在 SYSFS 中获得一些相应的节点/sys
,有些会在 中添加其他节点/dev
。
使用 sysfs:
监控 udev 事件
sudo udevadm monitor
插入您的设备并观察之前的命令输出,例如
monitor will print the received events for: UDEV - the event which udev sends out after rule processing KERNEL - the kernel uevent KERNEL[5797.642807] add /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.4 (usb) KERNEL[5797.643604] add /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.4/2-1.4:1.0 (usb) UDEV [5797.659463] add /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.4 (usb) UDEV [5798.753894] add /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.4/2-1.4:1.0 (usb)
bus-port.port:config.interface
因此,按照以下格式参考:总线:2、端口:1(根集线器)、端口:4(外部 USB 端口)、配置:1(插入设备)、接口:0USB端口的全称是
2-1.4
。检查其属性:
udevadm info -a /sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.4
或者设备(该端口是它的父节点)
udevadm info -a /sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.4/2-1.4:1.0
使用
/dev
:Android 手机就像调制解调器一样,它会在 中创建一个串行端口
/dev
。要了解新插入的设备,请参阅如何允许软件访问任何 USB 设备?udevadm info -a /dev/ttyACM0
另一种获取端口的方法是
dmesg
或:tail -f /var/log/kernel.log
然后使用端口号KERNELS=="2-1.4"
或KERNELS=="2-1.4:1.[0-9]*"
参考: