insmod: ERROR: could not insert module lin_mouse_drive.ko: Device or resource busy。
-
[ 申明,本人是刚接触驱动的幼鸟,写博客是为了分享和学习新的知识,如果内容有什么需要补充的,请联系我QQ:13169909394。
-
[
-
这是个低级错误,我们写驱动的时候会调用到相关的注册函数和注销函数,如果你只注册,而没有注销函数,很多资源都没有释放,这时候,就会出现Device or resource busy。设备繁忙。
这段代码是鼠标代码,在ubuntu下执行之后,发现是不能rmmod卸载的,因为ubuntu下本身就是鼠标,当你在卸载时候,就会出现设备冲突。(这是我的猜测,因为开发板刚好坏了,没有机会测试。日后会继续完善这篇博客的) -
] List item
] List item
#include <linux/kernel.h>
#include <linux/slab.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/usb/input.h>
#include <linux/hid.h>
/*
usb总线结构体usb_driver,
*/
#if 1
static int usb_mouse_probe(struct usb_interface *intf, const struct usb_device_id *id)
{
printk(" ------>usb_mouse_probe\n");
printk(KERN_INFO KBUILD_MODNAME " ------>usb_mouse_probe\n");
return 0;
}
static void usb_mouse_disconnect(struct usb_interface *intf)
{
printk(KERN_INFO KBUILD_MODNAME " ------>usb_mouse_disconnect\n");
}
static struct usb_device_id usb_mouse_id_table [] = {
{ USB_INTERFACE_INFO(USB_INTERFACE_CLASS_HID, USB_INTERFACE_SUBCLASS_BOOT,
USB_INTERFACE_PROTOCOL_MOUSE) },
/*
{
//USB_DEVICE(厂家id,产品id); //只支持某家生产的usb鼠标
},
{} // Terminating entry
*/
};
#endif
static struct usb_driver usb_mouse_driver = {
.name = "usbmouse",
.probe = usb_mouse_probe,
.disconnect = usb_mouse_disconnect,
.id_table = usb_mouse_id_table,
};
static int __init usb_mouse_init(void)
{
int retval = usb_register(&usb_mouse_driver);
if (retval == 0)
printk(KERN_INFO "DRIVER_DESC \n");
return retval;
}
static int __exit usb_mouse_exit(void)
{
usb_deregister(&usb_mouse_driver); //------->如果这个函数没有的话, 加载卸载几次驱动之后就会出现上面的问题
return 0;
}
module_init(usb_mouse_init);
module_exit(usb_mouse_exit);
MODULE_LICENSE("GPL"); // 描述模块的许可证
MODULE_AUTHOR("lin"); // 描述模块的作者
MODULE_DESCRIPTION("usb mourse module test"); // 描述模块的介绍信息
MODULE_ALIAS("no"); // 描述模块的别名信息