それで、私はudevを掘り下げて、問題にぶつかっています。
私は基本的な前提を理解していると思います(間違っている場合は修正してください)。システムの起動時またはその後のいずれかにデバイスが接続されています。 Udevはすべてのルールを調べて一致を探します。一致するものが見つかると、要求されたアクションを実行し、最後のルールに到達するまでルールのリストを下に移動し続けます。次に、次のデバイスで開始します。
今、私は2つのインターフェースを作成するUSBデバイスを持っています。アタッチすると、/sys/class/net/
を見るとcan0とcan1の両方が表示されます。ただし、/dev
では、/dev/bus/usb/002/00X
の下にこのエントリが1つだけあります。
さて、ここが私の問題です。これらの各インターフェースに特定の名前を付けたいと思います。私は、一方が常に他方の前に現れることを知っています。何もしないと、can0
およびcan1
という名前になります。 udevルールを挿入すると、最初に表示されるルールの名前は適切に変更されますが、dmesg
ログを見ると、カーネル名もcan0
であるため、2番目のルールはエラーになります(いいえcan1
)。
これをどのように回避しますか? udevadm
は、/dev
にリストされているデバイスが1つしかないため、役に立ちません。属性でそれらを区別できないようです。
以下の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.reactivate。 net/writing_udev_rules.html 。
インターフェイス名が同じである場合、それらはATTR{bInterfaceNumber}
で区別できます。