Usb
具有多個介面的設備的 Udev 規則
所以,我正在研究 udev 並遇到了一個問題。
我認為我理解了基本前提(如果我錯了,請糾正我)。由於您的系統啟動或之後的某個時間,設備已連接。Udev 會遍歷所有規則來尋找匹配項。一旦找到匹配項,它就會執行請求的任何操作,並繼續沿著規則列表向下移動,直到到達最後一個。然後它在下一個設備上開始。
現在,我有一個創建 2 個介面的 USB 設備。當我附上它時,當我查看時我得到了一個 can0 和 can1
/sys/class/net/
。但是在/dev
下,只有一個條目/dev/bus/usb/002/00X
。現在,這就是我的問題所在。我想將這些介面中的每一個命名為特定的名稱。我知道一個總是在另一個之前出現。如果我什麼都不做,他們會被命名為
can0
andcan1
。如果我放入 udev 規則,出現的第一個規則會被正確重命名,但查看dmesg
日誌,第二個會出錯,因為核心名稱也是can0
(因為沒有can1
)。如何解決這個問題?
udevadm
沒有幫助,因為 中只列出了一個設備/dev
,所以我似乎無法通過屬性來區分它們。下面的輸出
lsusb -v
:Bus 001 Device 011: ID 0c72:0011 PEAK System Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 2.00 bDeviceClass 0 (Defined at Interface level) bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize0 64 idVendor 0x0c72 PEAK System idProduct 0x0011 bcdDevice 0.00 iManufacturer 1 PEAK-System Technik GmbH iProduct 2 PCAN-USB Pro FD iSerial 0 bNumConfigurations 1 Configuration Descriptor: bLength 9 bDescriptorType 2 wTotalLength 111 bNumInterfaces 2 bConfigurationValue 1 iConfiguration 4 Config00 bmAttributes 0x80 (Bus Powered) MaxPower 240mA Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 0 bNumEndpoints 6 bInterfaceClass 0 (Defined at Interface level) bInterfaceSubClass 0 bInterfaceProtocol 0 iInterface 5 PCAN-USB Pro FD CAN Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x81 EP 1 IN bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0200 1x 512 bytes bInterval 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x01 EP 1 OUT bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0200 1x 512 bytes bInterval 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x82 EP 2 IN bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0200 1x 512 bytes bInterval 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x02 EP 2 OUT bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0200 1x 512 bytes bInterval 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x83 EP 3 IN bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0040 1x 64 bytes bInterval 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x03 EP 3 OUT bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0200 1x 512 bytes bInterval 0 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 1 bAlternateSetting 0 bNumEndpoints 6 bInterfaceClass 0 (Defined at Interface level) bInterfaceSubClass 0 bInterfaceProtocol 0 iInterface 6 PCAN-USB Pro FD LIN Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x84 EP 4 IN bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0040 1x 64 bytes bInterval 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x04 EP 4 OUT bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0040 1x 64 bytes bInterval 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x85 EP 5 IN bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0040 1x 64 bytes bInterval 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x05 EP 5 OUT bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0040 1x 64 bytes bInterval 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x86 EP 6 IN bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0040 1x 64 bytes bInterval 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x06 EP 6 OUT bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0040 1x 64 bytes bInterval 0 Device Qualifier (for other device speed): bLength 10 bDescriptorType 6 bcdUSB 2.00 bDeviceClass 0 (Defined at Interface level) bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize0 64 bNumConfigurations 1 Device Status: 0x0000 (Bus Powered)
如 中所示
lsusb -v
,您的介面有不同的名稱。這可以通過以下方式額外檢查udevadm info -a -p $(udevadm info -q path -n can0) udevadm info -a -p $(udevadm info -q path -n can1)
因此,您可以使用
ATTR{interface}
它們來區分它們。SUBSYSTEM=="usb", ATTRS{idVendor}=="0c72", ATTRS{idProduct}=="0011", ATTR{interface}=="PCAN-USB Pro FD CAN"
請注意,上面我們使用重要的
ATTR
和ATTRS
鍵的特定組合,因為我們在目前或目前和父設備中查找值,請參閱http://www.reactivated.net/writing_udev_rules.html。如果介面名稱相同,則可以通過 . 來區分它們
ATTR{bInterfaceNumber}
。