热插拔中断检测

时间:2017-01-11 04:15:10

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

我目前正在使用udev来检测我的应用程序中的USB热插拔事件,但据我所知它是一个轮询过程,它需要一个线程连续监视内核uevent。 有没有办法让内核通过中断通知我,或者只要检测到热插拔事件就会向我的进程发出信号?

由于

1 个答案:

答案 0 :(得分:0)

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

  1. 使用以下命令获取设备的信息,在我的示例中,它是USB控制台适配器。此命令将通过udev规则文件报告一系列我们可用于识别热插拔设备的内容。
  2.   

    $ udevadm info -a -n / dev / ttyUSB0

    现在制作一个文件 - /etc/udev/rules.d/99-usbdev.rules,内容如下。

      

    SUBSYSTEM ==" tty",ATTRS {idVendor} ==" xxxx",ATTRS {idProduct} ==" xxxx",   ATTRS {产品} ==" USB转UART桥控制器",   RUN + =" /usr/bin/devattached.sh"

    重新加载udev规则和服务:

    $ udevadm control --reload-rules
    $ systemctl restart udev.service
    

    调试:如果udev规则不起作用!!

    udevadm monitor --udev
    
    1. 使用您想要的操作制作一个脚本,并将其放在' RUN +'中提供的完全相同的路径上。别忘了给该脚本提供可执行权限。利用pgrep和kill命令从脚本向你的进程发送信号。