运行时make
,它没有显示任何警告或错误,但是当我在正在运行的内核中插入基本 USB 设备驱动程序模块时,我收到“已终止”消息。
这是我的代码:
#include<linux/init.h>
#include<linux/module.h>
#include<linux/kernel.h>
#include<linux/usb.h>
MODULE_LICENSE("GPL");
#ifndef DEBUG
#define DEBUG
#endif
static struct usb_driver skel_driver = {
};
static void __exit usb_deregister_func(void)
{
#ifdef DEBUG
printk(KERN_INFO "Begin : %s",__func__);
#endif
usb_deregister(&skel_driver);
#ifdef DEBUG
printk(KERN_INFO "End : %s",__func__);
#endif
}
static int __init usb_register_func(void)
{
int ret_val;
ret_val = 0;
#ifdef DEBUG
printk(KERN_INFO "Begin : %s",__func__);
#endif
ret_val = usb_register(&skel_driver);
if(ret_val)
{
#ifdef DEBUG
printk(KERN_ERR "ERROR : usb_register().");
#endif
return -1;
}
#ifdef DEBUG
printk(KERN_INFO "End : %s",__func__);
#endif
return 0;
}
module_exit(usb_deregister_func);
module_init(usb_register_func);
答案1
根据文档“编写 USB 驱动程序”,您需要在usb_driver 结构:
static struct usb_driver skel_driver = {
.owner = THIS_MODULE,
.name = "skeleton",
.id_table = skel_table,
.probe = skel_probe,
.disconnect = skel_disconnect,
};
注册操作可能正在尝试读取其中一个字段。