c - 通过中断检测热插拔

标签 c linux-kernel embedded-linux kernel-module udev

我目前正在使用 udev 来检测我的应用程序中的 USB 热插拔事件,但据我所知这是一个轮询过程,它需要一个线程持续监控内核 uevent。 有什么方法可以让内核通过中断通知我,或者在检测到热插拔事件时向我的进程发出信号?

谢谢

最佳答案

首先编写一个 udev 规则来识别设备并在该设备连接到主机时运行脚本(操作)。

  1. 使用以下命令获取设备信息,在我的示例中,它是 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
  1. 用您想要的操作制作一个脚本,并将其放在“RUN+”中提供的完全相同的路径上。不要忘记为该脚本授予可执行权限。使用 pgrep 和 kill 命令从脚本向您的进程发送信号。

关于c - 通过中断检测热插拔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41582608/

相关文章:

linux - 这是什么文件系统或文件格式?

ubuntu - 在 Yocto 构建的 linux 系统上启动后执行自定义脚本

c - 查找数组中元素之间的匹配项? (C)

c - 缓存大小对代码的影响

linux - linux进程调度器如何防止进程饥饿

linux - 在 dd-wrt ​​路由器上使用 Optware 软件包和启动脚本

来自文本文件的 C 字符串

c - 在 C 中收到 "member not in struct"错误

Android进程内存映射

android 手机通过 USB 端口安装桌面分区(磁盘级别的反向 USB 网络共享?)