예를 들어:
$ ls -l /dev/input/by-id
lrwxrwxrwx 1 root root 10 Feb 10 03:47 usb-Logitech_USB_Keyboard-event-if01 -> ../event22
lrwxrwxrwx 1 root root 10 Feb 10 03:47 usb-Logitech_USB_Keyboard-event-kbd -> ../event21
$ ls -l /dev/input/by-path/
lrwxrwxrwx 1 root root 10 Feb 10 03:47 pci-0000:00:14.0-usb-0:1.1:1.0-event-kbd -> ../event21
lrwxrwxrwx 1 root root 10 Feb 10 03:47 pci-0000:00:14.0-usb-0:1.1:1.1-event -> ../event22
bInterfaceProtocol
위의 인터페이스 1(event22)은 다음 과 같은 None
이유로 작동하지 않는다는 것을 알고 있습니다 bInterfaceNumber 1
.
$ sudo lsusb -v -d 046d:c31c
Bus 002 Device 005: ID 046d:c31c Logitech, Inc. Keyboard K120
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x046d Logitech, Inc.
idProduct 0xc31c Keyboard K120
bcdDevice 64.00
iManufacturer 1 Logitech
iProduct 2 USB Keyboard
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 59
bNumInterfaces 2
bConfigurationValue 1
iConfiguration 3 U64.00_B0001
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 90mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 3 Human Interface Device
bInterfaceSubClass 1 Boot Interface Subclass
bInterfaceProtocol 1 Keyboard
iInterface 2 USB Keyboard
HID Device Descriptor:
bLength 9
bDescriptorType 33
bcdHID 1.10
bCountryCode 0 Not supported
bNumDescriptors 1
bDescriptorType 34 Report
wDescriptorLength 65
Report Descriptors:
** UNAVAILABLE **
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0008 1x 8 bytes
bInterval 10
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 3 Human Interface Device
bInterfaceSubClass 0 No Subclass
bInterfaceProtocol 0 None
iInterface 2 USB Keyboard
HID Device Descriptor:
bLength 9
bDescriptorType 33
bcdHID 1.10
bCountryCode 0 Not supported
bNumDescriptors 1
bDescriptorType 34 Report
wDescriptorLength 159
Report Descriptors:
** UNAVAILABLE **
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0004 1x 4 bytes
bInterval 255
Device Status: 0x0000
(Bus Powered)
$
이해가 되지 않습니다. 두 가지 질문이 있습니다.
- 값이
bInterfaceProtocol
항상None
호스트와 독립적이라면 이 사용되지 않는 인터페이스의 요점은 무엇입니까? - 값이
bInterfaceProtocol
커널에 의해 결정되는 경우 커널이 값을 None으로 설정하는 조건은 무엇입니까?
답변1
커널은 결정하지 않습니다 bInterfaceProtocol
. 이 값은 연결된 USB 장치에서 수신됩니다.
HID 장치는 여러 프로토콜을 지원합니다. 인터페이스 설명자의 bInterfaceProtocol 멤버는 bInterfaceSubClass 멤버가 장치가 부팅 인터페이스를 지원한다고 선언하는 경우에만 의미가 있고, 그렇지 않으면 0입니다.
확인하다HID 1.11용 USB 장치 클래스 정의더 많은 정보를 알고 싶습니다.
답변2
와는 별개로@desowin 답변, 다중 인터페이스가 있는 장치는 명시된 대로 복합 장치임을 의미한다고 덧붙이고 싶습니다.범용 직렬 버스 2.0 소개:
동시에 장치에는 여러 인터페이스가 있을 수 있으므로 여러 인터페이스 설명자가 있을 수 있습니다. 서로 다른 기능을 수행하는 여러 인터페이스가 있는 USB 장치를 복합 장치라고 합니다. USB 오디오 헤드셋이 한 예입니다. 헤드셋에는 두 개의 커넥터가 있는 USB 장치가 있습니다. 커넥터 중 하나는 헤드셋의 오디오용이고 다른 커넥터는 볼륨 조절용 컨트롤일 수 있습니다. 여러 인터페이스를 동시에 활성화할 수 있습니다.
None
이 장치 인터페이스의 기능이 무엇인지 알아보기 위해 여러 키를 동시에 sudo cat /dev/input/by-id/usb-CHESEN_USB_Keyboard-event-kbd
눌러 sudo cat /dev/input/by-id/usb-CHESEN_USB_Keyboard-event-if01
테스트해 본 결과 if01
멀티미디어 키를 눌러 Bluetooth 설정을 열고 볼륨을 조절할 때만 출력이 나오는 것을 확인했습니다. .