Debian 시스템에서 USB 키보드 드라이버를 로드할 수 없습니다.

Debian 시스템에서 USB 키보드 드라이버를 로드할 수 없습니다.

매우 간단한 USB 키보드 드라이버가 있습니다.

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/usb.h>
#include <linux/usb/input.h>
#include <linux/hid.h>

MODULE_LICENSE("GPL");
MODULE_AUTHOR("TEST_USER");
MODULE_DESCRIPTION("A USB Keyboard Driver Kernel Module");

static struct usb_device_id usb_kbd_id_table[] = {
    { USB_INTERFACE_INFO(
        USB_INTERFACE_CLASS_HID,
        USB_INTERFACE_SUBCLASS_BOOT,
    USB_INTERFACE_PROTOCOL_KEYBOARD) },
    { } /* Terminating entry */
};

MODULE_DEVICE_TABLE(usb, usb_kbd_id_table);

static int kbd_probe(struct usb_interface *interface,
    const struct usb_device_id *id)
{
    pr_info("USB keyboard probe function called\n");
    return 0;
}

static void kbd_disconnect(struct usb_interface *interface)
{
    pr_info("USB keyboard disconnect function called\n");
}

static struct usb_driver kbd_driver = {
    .name  = "usbkbd",
    .probe = kbd_probe,
    .disconnect = kbd_disconnect,
    .id_table = usb_kbd_id_table,
};

static int __init kbd_init(void)
{
    int res = 0;
    res = usb_register(&kbd_driver);
    if (res)
        pr_err("usb_register failed with error %d", res);
    return res;
}

static void __exit kbd_exit(void)
{
    pr_debug("USB Keyboard Removed..\n");
    usb_deregister(&kbd_driver);
    return;
}

module_init(kbd_init);
module_exit(kbd_exit);

이름을 지정 kbtest.ko하고 로드했는데 insmod kbtest.ko성공했고 유효성 검사를 통과했습니다 lsmod. 구체적으로:

lsmod | grep "usb"
usbhid                 31758  0 
hid                    69153  2 hid_generic,usbhid
usbcore               115019  6 ohci_hcd,ohci_pci,ehci_hcd,ehci_pci,kbtest,usbhid
usb_common             12484  1 usbcore

그래서 USB 키보드를 연결했는데 드라이버를 실행할 수 없었습니다. 특히 프로브 함수는 호출되지 않습니다. 이것은 키보드를 감지한 후의 dmesg입니다.

[ 1219.695553] usb 1-2: new full-speed USB device number 6 using ohci-pci
[ 1219.996010] usb 1-2: New USB device found, idVendor=1267, idProduct=0103
[ 1220.016126] usb 1-2: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[ 1220.100005] input: HID 1267:0103 as /devices/pci0000:00/0000:00:06.0/usb1/1-2/1-2:1.0/0003:1267:0103.0008/input/input14
[ 1220.126349] hid-generic 0003:1267:0103.0008: input,hidraw1: USB HID v1.10 Keyboard [HID 1267:0103] on usb-0000:00:06.0-2/input0
[ 1220.206453] input: HID 1267:0103 as /devices/pci0000:00/0000:00:06.0/usb1/1-2/1-2:1.1/0003:1267:0103.0009/input/input15
[ 1220.224334] hid-generic 0003:1267:0103.0009: input,hidraw2: USB HID v1.10 Device [HID 1267:0103] on usb-0000:00:06.0-2/input1

정보는 여기서 끝입니다. 여기서 문제가 무엇입니까? 저는 Virtual Box에서 데비안 머신을 실행하고 있습니다.

답변1

우분투 14.04 시스템에서도 동일한 문제에 직면했습니다. 문제는 기본 usbhid드라이버로 인해 드라이버가 제대로 작동하지 않는다는 것일 수 있습니다. 이것이 probe핫플러그 시 호출되지 않는 이유일 수 있습니다. usbhid모듈을 제거해 보세요 . udev rules배포판의 정의를 확인하세요 . usbhid제거하더라도 핫플러그에 기본 드라이버 모듈이 자동으로 로드됩니다.

관련 정보