I have a USB Linux Kernel module that compiles and builds. Running insmod
loads my module and dmseg
and tail -f /var/log/debug
shows me it works as expected.
Running depmod -a
then modprobe
from the terminal loads the module and modprobe -r
unloads and I see – tail -f /var/log/debug
output as expected.
When I plug in my USB keyboard though it does not trigger and load on-demand as expected.
I have investigated /etc/udev/rules.d
with no success. Any workarounds or guidance is most welcome. Am running Ubuntu 12.04.4 LTS
with a Custom Linux Kernel 3.14.0
#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("Aruna Hewapathirane");
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 __init kbd_init(void)
{
printk(KERN_DEBUG "USB Keyboard Plugged In.. \n");
return 0;
}
static void __exit kbd_exit(void)
{
printk(KERN_DEBUG "USB Keyboard Removed.. \n");
return ;
}
module_init(kbd_init);
module_exit(kbd_exit);
Best Answer
You are missing with
usb_register
andprobe
functionsHere is updated device driver with
usb_register
andprobe
functionsPlease refer previous SO question for
probe
function's use.