我目前正在使用 udev 来检测我的应用程序中的 USB 热插拔事件,但据我所知这是一个轮询过程,它需要一个线程持续监控内核 uevent。有什么方法可以让内核通过中断通知我,或者在检测到热插拔事件时向我的进程发出信号?
谢谢
首先编写一个 udev 规则来识别设备并在该设备连接到主机时运行脚本(操作)。
- 使用以下命令获取设备信息,在我的示例中,它是 USB 控制台适配器。此命令将报告一系列信息,我们可以使用这些信息通过 udev 规则文件识别热插拔设备。
$ udevadm info -a -n /dev/ttyUSB0
现在创建一个文件 -/etc/udev/rules.d/99-usbdev.rules,内容如下。
SUBSYSTEM=="tty", ATTRS{idVendor}=="xxxx", ATTRS{idProduct}=="xxxx", ATTRS{product}=="USB to UART Bridge Controller", RUN+="/usr/bin/devattached.sh"
重新加载 udev 规则和服务:
$ udevadm control --reload-rules
$ systemctl restart udev.service
调试:如果 udev 规则不起作用!!
udevadm monitor --udev
- 用您想要的操作制作一个脚本,并将其放在“RUN+”中提供的完全相同的路径上。不要忘记为该脚本授予可执行权限。使用 pgrep 和 kill 命令从脚本向您的进程发送信号。
我是一名优秀的程序员,十分优秀!