
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