udev
ルールに問題があります。現時点では、Android電話がコンピューターのUSBポートに接続されるたびにスクリプトを実行するためにudevルールをセットアップしました。しかし、すべてからスクリプトを実行したくない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}"
一般に、接続されたデバイスは、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
の形式で 参照 を参照してください:Bus:2、Port:1(root hub)、Port:4(external usb port)、Config:1(plugged device)、Interface :0
USBポートのフルネームは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
にシリアルポートを作成します。差し込まれた新しいデバイスについては、 SBデバイスへのソフトウェアアクセスを許可する方法?
udevadm info -a /dev/ttyACM0
別の方法として、ポートを取得するにはdmesg
または:
tail -f /var/log/kernel.log
次に、KERNELS=="2-1.4"
またはKERNELS=="2-1.4:1.[0-9]*"
にポート番号を使用します
参照: