linux添加usb规则不生效,linux – 使用bInterfaceNumber的udev规则不起作用

我正在尝试使用udev为相关名称提供USB串行设备,但我现在运气好了.

# lsusb -d 04e2:1412 -v

Bus 004 Device 028: ID 04e2:1412 Exar Corp.

Device Descriptor:

bLength 18

bDescriptorType 1

bcdUSB 2.00

bDeviceClass 239 Miscellaneous Device

bDeviceSubClass 2 Common Class

bDeviceProtocol 1 Interface Association

bMaxPacketSize0 64

idVendor 0x04e2 Exar Corp.

idProduct 0x1412

bcdDevice 0.02

iManufacturer 0

iProduct 0

iSerial 0

bNumConfigurations 1

Configuration Descriptor:

bLength 9

bDescriptorType 2

wTotalLength 141

bNumInterfaces 4

bConfigurationValue 1

iConfiguration 0

bmAttributes 0xa0

(Bus Powered)

Remote Wakeup

MaxPower 94mA

Interface Association:

bLength 8

bDescriptorType 11

bFirstInterface 0

bInterfaceCount 2

bFunctionClass 2 Communications

bFunctionSubClass 2 Abstract (modem)

bFunctionProtocol 0 None

iFunction 0

Interface Descriptor:

bLength 9

bDescriptorType 4

bInterfaceNumber 0

bAlternateSetting 0

bNumEndpoints 1

bInterfaceClass 2 Communications

bInterfaceSubClass 2 Abstract (modem)

bInterfaceProtocol 1 AT-commands (v.25ter)

iInterface 0

CDC Header:

bcdCDC 1.10

CDC ACM:

bmCapabilities 0x06

sends break

line coding and serial state

CDC Union:

bMasterInterface 0

bSlaveInterface 1

CDC Call Management:

bmCapabilities 0x01

call management

bDataInterface 1

Endpoint Descriptor:

bLength 7

bDescriptorType 5

bEndpointAddress 0x85 EP 5 IN

bmAttributes 3

Transfer Type Interrupt

Synch Type None

Usage Type Data

wMaxPacketSize 0x0040 1x 64 bytes

bInterval 2

Interface Descriptor:

bLength 9

bDescriptorType 4

bInterfaceNumber 1

bAlternateSetting 0

bNumEndpoints 2

bInterfaceClass 10 CDC Data

bInterfaceSubClass 0 Unused

bInterfaceProtocol 0

iInterface 0

Endpoint Descriptor:

bLength 7

bDescriptorType 5

bEndpointAddress 0x01 EP 1 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 0x81 EP 1 IN

bmAttributes 2

Transfer Type Bulk

Synch Type None

Usage Type Data

wMaxPacketSize 0x0040 1x 64 bytes

bInterval 0

Interface Association:

bLength 8

bDescriptorType 11

bFirstInterface 2

bInterfaceCount 2

bFunctionClass 2 Communications

bFunctionSubClass 2 Abstract (modem)

bFunctionProtocol 0 None

iFunction 0

Interface Descriptor:

bLength 9

bDescriptorType 4

bInterfaceNumber 2

bAlternateSetting 0

bNumEndpoints 1

bInterfaceClass 2 Communications

bInterfaceSubClass 2 Abstract (modem)

bInterfaceProtocol 1 AT-commands (v.25ter)

iInterface 0

CDC Header:

bcdCDC 1.10

CDC ACM:

bmCapabilities 0x06

sends break

line coding and serial state

CDC Union:

bMasterInterface 2

bSlaveInterface 3

CDC Call Management:

bmCapabilities 0x01

call management

bDataInterface 3

Endpoint Descriptor:

bLength 7

bDescriptorType 5

bEndpointAddress 0x86 EP 6 IN

bmAttributes 3

Transfer Type Interrupt

Synch Type None

Usage Type Data

wMaxPacketSize 0x0040 1x 64 bytes

bInterval 2

Interface Descriptor:

bLength 9

bDescriptorType 4

bInterfaceNumber 3

bAlternateSetting 0

bNumEndpoints 2

bInterfaceClass 10 CDC Data

bInterfaceSubClass 0 Unused

bInterfaceProtocol 0

iInterface 0

Endpoint Descriptor:

bLength 7

bDescriptorType 5

bEndpointAddress 0x02 EP 2 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 0x82 EP 2 IN

bmAttributes 2

Transfer Type Bulk

Synch Type None

Usage Type Data

wMaxPacketSize 0x0040 1x 64 bytes

bInterval 0

Device Status: 0x0000

(Bus Powered)

我正在尝试的udev规则是:

KERNEL=="ttyUSB[0-9]*", SUBSYSTEMS=="usb", ATTRS{bInterfaceNumber}=="01", ATTRS{idVendor}=="04e2", ATTRS{idProduct}=="1412", ACTION=="add", SYMLINK+="test_USB0"

KERNEL=="ttyUSB[0-9]*", SUBSYSTEMS=="usb", ATTRS{bInterfaceNumber}=="01", ATTRS{idVendor}=="04e2", ATTRS{idProduct}=="1412", ACTION=="add", SYMLINK+="test_USB1"

KERNEL=="ttyUSB[0-9]*", SUBSYSTEMS=="usb", ATTRS{bInterfaceNumber}=="02", ATTRS{idVendor}=="04e2", ATTRS{idProduct}=="1412", ACTION=="add", SYMLINK+="test_USB2"

KERNEL=="ttyUSB[0-9]*", SUBSYSTEMS=="usb", ATTRS{bInterfaceNumber}=="03", ATTRS{idVendor}=="04e2", ATTRS{idProduct}=="1412", ACTION=="add", SYMLINK+="test_USB3"

当我只使用没有bInterfaceNumber属性的第一个udev规则时,如下所示:

KERNEL=="ttyUSB[0-9]*", SUBSYSTEMS=="usb", ATTRS{idVendor}=="04e2", ATTRS{idProduct}=="1412", ACTION=="add", SYMLINK+="test_USB0"

它工作正常.我可以看到创建的符号链接/ dev / test_USB0指向/ dev / ttyUSB0但是当我插入这个usbserial设备时创建的其他ttyUSB设备怎么样?

我的猜测是使用bInterfaceNumber属性但是当我把它放入时,没有任何反应,它似乎完全绕过我的规则.

谁能帮我这个?

解决方法:

可能是具有“usb”子系统的接口设备没有得到任何

设备文件创建,只有USB设备本身.你可以看到udev事件

在使用udevadm插入设备时,与变量一起创建

监控.

我看到设备的事件对应于sysfs节点,可以

有bInterfaceNumber属性没有DEVNAME变量,其中

可能表示没有设备文件.相同的sysfs节点

也没有“dev”文件,这加强了这一点.

然后,我认为你不想为一个裸的“usb”设备创建一个符号链接,但是

而不是“tty”设备,所以你应该匹配“tty”子系统.

我能够将我的单接口tty转换器与此规则匹配:

SUBSYSTEM=="tty", ACTION=="add", \

ENV{ID_VENDOR_ID}=="067b", ENV{ID_MODEL_ID}=="2303", \

ENV{ID_USB_INTERFACE_NUM}=="00", SYMLINK+="test_USB0"

但是后来“ID_USB_INTERFACE_NUM”被我的udev规则分配了

系统(Debian Jessie)和你的系统(尽管不太可能)可能没有它们.

仍然,你应该能够制作这样的规则,可能是通过匹配usb

首先是接口设备,然后将bInterfaceNumber分配给环境

变量然后在匹配tty设备的规则中使用它.

标签:linux,usb,udev,usbserial

来源: https://codeday.me/bug/20190823/1695845.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值