Linux
udev規則匹配多節點USB設備
我有一個創建 5 個 tty 節點的 3G/GPS 設備,儘管它只是一個物理 USB 連接。基本上,一個多埠 USB 串列適配器。
我正在嘗試創建一些
udev
規則以確保這些節點始終具有相同的名稱,或者至少具有指向它們的符號連結。我確實可以在
/sys/devices/platform/pxa27x-ohci/usb1/1-2/1-2.2/
. 裡面是1-2.2:1.0/
to1-2.2:1.4/
,對於它創建的 5 個節點。我也可以在
/sys/bus/usb/devices/1-2.2
.設備的udev資訊如下:
udevadm info -a -p /sys/bus/usb/devices/1-2.2/1-2.2\:1.0 looking at device '/bus/usb/devices/1-2.2/1-2.2:1.0': KERNEL=="1-2.2:1.0" SUBSYSTEM=="usb" DRIVER=="option" ATTR{bInterfaceNumber}=="00" ATTR{bAlternateSetting}==" 0" ATTR{bNumEndpoints}=="03" ATTR{bInterfaceClass}=="ff" ATTR{bInterfaceSubClass}=="01" ATTR{bInterfaceProtocol}=="01" ATTR{modalias}=="usb:v12D1p1506d0000dc00dsc00dp00icFFisc01ip01" ATTR{supports_autosuspend}=="0"
從此時起,所有節點都具有相同的資訊。節點之間唯一不同的是 bInterfaceNumber 屬性和設備路徑。所以,我想通過開發路徑編寫規則。
現在,由於某種原因,所有這些節點都匹配了以下規則。
ACTION=="add", DEV="/devices/platform/pxa27x-ohci/usb1/1-2/1-2.2/1-2.2:1.0" SYMLINK+="huawey0"
所以基本上,
huawey0
指向列舉的最後一個節點。設備創建了從 ttyUSB2 到 6 的節點,這個連結指向 USB6。所以,我嘗試了核心節點:
ACTION=="add", KERNEL=="1-2.2:1.0" SYMLINK+="huawey0"
現在,/dev 上什麼也沒有出現。
在此之後,我嘗試使用 bInterfaceNumber 將它們分開。我使用了以下規則
ACTION=="add", DEV="/devices/platform/pxa27x-ohci/usb1/1-2/1-2.2/1-2.2:1.[0-4]" ATTR{bInterfaceNumber}=="00" SYMLINK+="huawey0"
而且,什麼也沒有發生。我什至嘗試了一個精簡版的規則..
ACTION=="add", ATTR{bInterfaceNumber}=="00" SYMLINK+="huawey0"
仍然沒有任何反應。為什麼不匹配?
您的規則都存在語法錯誤:
=
is for assignment==
是為了比較,所以您實際上並沒有查看DEV
等於什麼,而是分配了它。- 您需要
,
在所有語句之間,之前沒有SYMLINK+=
。拳法
ACTION=="add", DEV=="/devices/platform/pxa27x-ohci/usb1/1-2/1-2.2/1-2.2:1.0", SYMLINK+="huawey0"
第二條規則
ACTION=="add", KERNEL=="1-2.2:1.0", SYMLINK+="huawey0"
第三條規則
ACTION=="add", DEV=="/devices/platform/pxa27x-ohci/usb1/1-2/1-2.2/1-2.2:1.[0-4]", ATTR{bInterfaceNumber}=="00", SYMLINK+="huawey0"
第四條規則
ACTION=="add", ATTR{bInterfaceNumber}=="00", SYMLINK+="huawey0"
所有這些規則現在都應該做你想做的(我個人會使用第一個)。