Ubuntu 14.04 상자에 무선 PS3 컨트롤러 어댑터가 연결되어 있습니다. 여기에는 XInput과 DInput의 두 가지 모드가 있으며, 제가 아는 한 USB를 통해 서로 다른 두 공급업체/제품 ID를 전달합니다(XInput에는 Microsoft XBOX ID가 있고 다른 하나는 일반 ID입니다). XInput 모드는 잘 작동하지만(xpad 드라이버 로드됨) DInput 모드에서는 커널이 장치를 조이스틱이 아닌 마우스로 인식합니다.
관련 질문:
조이스틱으로 인식되게 하려면 무엇을 변경해야 합니까?
usbhid 드라이버는 어떻게 문자 장치에 부 번호를 할당합니까?
정보
[ 1692.151837] usb 3-1: new full-speed USB device number 8 using ohci-pci
[ 1692.325523] usb 3-1: New USB device found, idVendor=0079, idProduct=1801
[ 1692.325528] usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 1692.325530] usb 3-1: Product: Mayflash PS3 Game Controller Adapater
[ 1692.325531] usb 3-1: Manufacturer: HJZ
[ 1692.341586] input: HJZ Mayflash PS3 Game Controller Adapater as /devices/pci0000:00/0000:00:12.0/usb3/3-1/3-1:1.0/input/input14
[ 1692.341854] hid-generic 0003:0079:1801.0006: input,hidraw3: USB HID v1.11 Joystick [HJZ Mayflash PS3 Game Controller Adapater] on usb-0000:00:12.0-1/input0
sudo udevadm 정보 --path=/devices/pci0000:00/0000:00:12.0/usb3/3-1/3-1:1.0/input/input14
P: /devices/pci0000:00/0000:00:12.0/usb3/3-1/3-1:1.0/input/input14
E: ABS=ffffff
E: DEVPATH=/devices/pci0000:00/0000:00:12.0/usb3/3-1/3-1:1.0/input/input14
...
E: ID_INPUT_TABLET=1
E: ID_MODEL=Mayflash_PS3_Game_Controller_Adapater
...
E: ID_TYPE=hid
E: ID_USB_DRIVER=usbhid
ll /dev/input/by-id/
lrwxrwxrwx 1 root root 9 May 8 16:18 usb-HJZ_Mayflash_PS3_Game_Controller_Adapater-event-mouse -> ../event4
lrwxrwxrwx 1 root root 9 May 8 16:18 usb-HJZ_Mayflash_PS3_Game_Controller_Adapater-mouse -> ../mouse1
sudo udevadm 모니터 --property --kernel --udev
...
KERNEL[1693.830143] add /devices/pci0000:00/0000:00:12.0/usb3/3-1/3-1:1.0/input/input14/mouse1 (input)
ACTION=add
DEVNAME=/dev/input/mouse1
DEVPATH=/devices/pci0000:00/0000:00:12.0/usb3/3-1/3-1:1.0/input/input14/mouse1
MAJOR=13
MINOR=33
SEQNUM=2196
SUBSYSTEM=input
UDEV_LOG=7
...
고쳐 쓰다
지식을 찾기 위해 usbhid 드라이버의 주요/부 번호가 나열된 웹 사이트를 찾았습니다. 아래에 표시된 대로 내 장치는 13,32이며 이는 mouse0용 드라이버에 의해 예약되어 있습니다. 드라이버를 속여 다른 마이너 번호를 할당해야 하는 것 같은데요? ...아니면 제가 잘못된 방향으로 가고 있는 걸까요? (물론 저는 Linux보다 Windows 드라이버 개발에 더 익숙합니다.)
USB device number mappings
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
13 char Input drivers
0 = /dev/input/js0 First joystick
1 = /dev/input/js1 Second joystick
...
32 = /dev/input/mouse0 First mouse
33 = /dev/input/mouse1 Second mouse
ls -l /dev/입력/
crw-r----- 1 root root 13, 32 May 9 11:48 mouse0
lsusb -v
Bus 003 Device 003: ID 0079:1801 DragonRise Inc.
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0079 DragonRise Inc.
idProduct 0x1801
bcdDevice 1.00
iManufacturer 1 HJZ
iProduct 2 Mayflash PS3 Game Controller Adapater
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 34
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 500mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 3 Human Interface Device
bInterfaceSubClass 0 No Subclass
bInterfaceProtocol 0 None
iInterface 0
HID Device Descriptor:
bLength 9
bDescriptorType 33
bcdHID 1.11
bCountryCode 0 Not supported
bNumDescriptors 1
bDescriptorType 34 Report
wDescriptorLength 428
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 1
Device Status: 0x0002
(Bus Powered)
Remote Wakeup Enabled
답변1
HID 시스템은 공급업체 및 제품 ID와 일치하는 특수 드라이버가 있는지 확인하고, 그렇지 않은 경우 이를 일반 HID 장치로 취급합니다. 장치에서 보낸 설명자를 사용하여 장치가 무엇인지 확인합니다.
당신의 경우에는전용 숨김 드라이버가 있습니다., 하지만 로드 중인 것 같지 않습니다. 시도해 볼 수는 있지만 modprobe hid-dr
설치되어 있지 않을 수도 있습니다. 우분투에서는linux-image-extra
패키지 안에 있어요.