热插拔设备驱动程序模块的问题

时间:2014-05-04 18:57:30

标签: linux usb

我正在编写一个模块,当你插入一个USB鼠标打印“hello world”时。当我插入鼠标时,问题出现了,dmesg打印了以下消息的六倍:

  

[7367.238560] helwor_mod:不同意符号的版本   module_layout

这是我的代码

#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("Isaac Lleida <isakyllr@opmbx.org>");
MODULE_VERSION("0.1");


static struct usb_device_id usb_mouse_id_table [] = {
    { USB_INTERFACE_INFO(USB_INTERFACE_CLASS_HID, USB_INTERFACE_SUBCLASS_BOOT,
            USB_INTERFACE_PROTOCOL_MOUSE) },
    { }
};
MODULE_DEVICE_TABLE(usb, usb_mouse_id_table);


static int mouse_probe(struct usb_interface *iface,
    const struct usb_device_id *id)
{
    pr_info("Hello World!");
    return 0;
}

static void mouse_disconnect(struct usb_interface *iface)
{
    pr_info("Bye World!");
}


static struct usb_driver mouse_driver = {
    .name  = "usbmouse",
    .probe = mouse_probe,
    .disconnect = mouse_disconnect,
    .id_table = usb_mouse_id_table,
};
module_usb_driver(mouse_driver);

static int __init hello_init(void)
{
    int res = 0;
    res = usb_register(&mouse_driver);

    if(res)
        pr_err("usb_register failed with error %d", res);
    return res;
}

static void __exit hello_exit(void)
{
    pr_debug("USB Mouse Removed...");
    usb_deregister(&mouse_driver);
}

我整个下午一直在谷歌上搜索,但仍然不知道如何解决它。 我希望有人可以帮助我,谢谢。

2 个答案:

答案 0 :(得分:0)

这是相关的: module_layout version incompatibility

我敢打赌,用于编译模块的内核源代码(头文件)来自与您运行的内核版本不同的内核版本。

答案 1 :(得分:0)

问题解决了。产生此问题是因为该设备正由另一个驱动程序控制并且已加载到系统中。只需卸载它并加载驱动程序模块即可。

抱歉吉尔斯为这个场外人士。