当 Android 手机连接到指定/选定的 USB 端口时执行脚本

当 Android 手机连接到指定/选定的 USB 端口时执行脚本

我的规则有些问题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:

    1. 监控 udev 事件

      sudo udevadm monitor
      
    2. 插入您的设备并观察之前的命令输出,例如

      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(插入设备)、接口:0

      USB端口的全称是2-1.4

    3. 检查其属性:

      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]*"

参考:

相关内容