키보드 사용자 정의 드라이버 GNU/Linux 4.1.0-rc8(Fedora)

키보드 사용자 정의 드라이버 GNU/Linux 4.1.0-rc8(Fedora)

저는 커널 4.1.0-rc8을 사용하는 Logitech G110 USB 키보드용 드라이버를 작성 중입니다.

dmesg내 드라이버는 insmod를 사용하여 완벽하게 로드됩니다(디버그 메시지는 초기화를 통과했다는 사실 로 인쇄됩니다 module_init).

modprobe목록에 모듈을 표시하기만 하면 됩니다. (0개의 장치가 이를 사용하고 있습니다.)

그러나 키보드를 연결하면 커널이 제조업체와 유형을 인식하고 특정 드라이버를 로드하는 것 같습니다.

[ 3611.699275] usb 6-5: new high-speed USB device number 11 using ehci-pci
[ 3611.815794] usb 6-5: New USB device found, idVendor=05e3, idProduct=0607
[ 3611.815803] usb 6-5: New USB device strings: Mfr=0, Product=1, SerialNumber=0
[ 3611.815807] usb 6-5: Product: USB2.0 Hub
[ 3611.817753] hub 6-5:1.0: USB hub found
[ 3611.818776] hub 6-5:1.0: 4 ports detected
[ 3612.086996] usb 6-5.1: new low-speed USB device number 12 using ehci-pci
[ 3612.171428] usb 6-5.1: New USB device found, idVendor=046d, idProduct=c22b
[ 3612.171436] usb 6-5.1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 3612.171441] usb 6-5.1: Product: G110 G-keys
[ 3612.171445] usb 6-5.1: Manufacturer: LOGITECH
[ 3612.179099] input: LOGITECH G110 G-keys as /devices/pci0000:00/0000:00:13.2/usb6/6-5/6-5.1/6-5.1:1.0/0003:046D:C22B.0014/input/input32
[ 3612.230502] hid-generic 0003:046D:C22B.0014: input,hiddev0,hidraw0: USB HID v1.00 Keypad [LOGITECH G110 G-keys] on usb-0000:00:13.2-5.1/input0
[ 3612.230768] usbhid 6-5.1:1.1: couldn't find an input interrupt endpoint
[ 3612.294146] usb 6-5.3: new low-speed USB device number 13 using ehci-pci
[ 3612.377583] usb 6-5.3: New USB device found, idVendor=046d, idProduct=c22a
[ 3612.377591] usb 6-5.3: New USB device strings: Mfr=0, Product=2, SerialNumber=0
[ 3612.377596] usb 6-5.3: Product: Gaming Keyboard G110
[ 3612.384673] input: Gaming Keyboard G110 as /devices/pci0000:00/0000:00:13.2/usb6/6-5/6-5.3/6-5.3:1.0/0003:046D:C22A.0015/input/input33
[ 3612.435649] hid-generic 0003:046D:C22A.0015: input,hidraw1: USB HID v1.10 Keyboard [Gaming Keyboard G110] on usb-0000:00:13.2-5.3/input0
[ 3612.443182] input: Gaming Keyboard G110 as /devices/pci0000:00/0000:00:13.2/usb6/6-5/6-5.3/6-5.3:1.1/0003:046D:C22A.0016/input/input34
[ 3612.494710] hid-generic 0003:046D:C22A.0016: input,hiddev0,hidraw2: USB HID v1.10 Device [Gaming Keyboard G110] on usb-0000:00:13.2-5.3/input1

인터페이스가 정상적으로 등록된 경우에도 다음과 같습니다.

[ 4024.380949] usbcore: registered new interface driver usbkeyboard

이 표의 구체적인 조항은 다음과 같습니다.

struct usb_device_id custom_usb_table[] = {
        { USB_INTERFACE_INFO(USB_INTERFACE_CLASS_HID,
        USB_INTERFACE_SUBCLASS_BOOT, USB_INTERFACE_PROTOCOL_KEYBOARD)},
        { }
};

MODULE_DEVICE_TABLE(usb, custom_usb_table);

운전사:

static struct usb_driver usb_keyboard_driver = {
        .name = "usbkeyboard",
        .probe = usb_probe,
        .disconnect = usb_disconnect,
        .id_table = custom_usb_table
};

기능 usb_probe:

static int usb_probe(struct usb_interface *usb_iface,
        const struct usb_device_id *usb_devid)
{
        printk(KERN_DEBUG "CUSTOM-MODULE: USB device was plugged in!\n");
        return 0;
}

그리고 module_init트리거:

static int initialize(void)
{
        int retVal = 0;

        retVal = usb_register(&usb_keyboard_driver);
        printk(KERN_DEBUG "CUSTOM-MODULE: initialize() called!\n");
        if (retVal)
                printk(KERN_DEBUG "CUSTOM-MODULE: Error %d registering driver!\n", retVal);
        return 0;
}

(나는 printk가 이 디버그 정보를 인쇄하는 가장 추악한 방법이라는 것을 알고 있으며 더 나은 옵션이 많이 있지만 지금은 그게 요점이 아닙니다.)

내 질문은 다음과 같습니다

  1. 나는 위에서 커널이 내가 작성한 일반 키보드 인터페이스보다 특정 Logitech 드라이버를 "선호"한다고 가정합니다. 맞습니까?
  2. 다음 재부팅 때까지 Logitech 드라이버를 사용하지 않고 대신 일반 인터페이스 드라이버를 사용하도록 커널에 지시하는 방법이 있습니까?

관련 정보