插入USB设备时如何加载模块(而不是驱动程序)

时间:2015-02-06 15:36:56

标签: c linux kernel

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

/*
 * Version information
*/
#define DRIVER_VERSION ""
#define DRIVER_DESC "Hello World module"
#define DRIVER_LICENSE "GPL"

MODULE_LICENSE(DRIVER_LICENSE);
MODULE_AUTHOR(DRIVER_AUTHOR);

static void __exit hello_world_exit(void)
{
    pr_debug("Bye!\n");
}

static int __init hello_world_init(void)
{
pr_debug("Hello, USB!");
return 0;
}

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

MODULE_DEVICE_TABLE(usb, usb_kbd_id_table);

module_init(hello_world_init);
module_exit(hello_world_exit);

当插入USB鼠标时(使用用户空间热插拔工具),如何让内核加载此模块?现在,我已将hello_world.ko文件放在/ lib / modules / $(uname -r)中并运行depmod -a。

1 个答案:

答案 0 :(得分:3)

在现代Linux中,udev处理检测到新硬件时加载驱动程序/模块(或调用任何其他命令)的功能。您必须为设备编写一个udev规则,该规则将指示内核在检测到设备并发生相应事件时加载模块。阅读更多相关信息here