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

How to load a module (not a driver) when a USB device is plugged in

#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。

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