Target: Skeleton.c 文件 kernel/drivers/usb
1.linux driver 首先需要注册到linux usb subsystem(申明此驱动支持什么设备以及接上或拔掉所支持的设备时应该有哪些函数负责响应)。通过定义一个usb_driver实现其结构如下。
static struct usb_driver skel_driver = {
.name = "skeleton", //驱动名称
.probe = skel_probe,//probe函数在符合id_table的设备接上时被调用
.disconnect = skel_disconnect,//disconnect函数在符合id_table的设备拔掉时被调用
...
.id_table = skel_table,
};
2. 注册
module_init(usb_skel_init);
static int __init usb_skel_init(void)
{
...
result = usb_register(&skel_driver);
...
}
3.实现
/* Define these values to match your devices */
#define USB_SKEL_VENDOR_ID 0xfff0
#define USB_SKEL_PRODUCT_ID 0xfff0
/* table of devices that work with this driver */
static const struct usb_device_id skel_table[] = {
{ USB_DEVICE(USB_SKEL_VENDOR_ID, USB_SKEL_PRODUCT_ID) },
{ } /* Terminating entry */
};
MODULE_DEVICE_TABLE(usb, skel_table);//使能插上设备时自动载入该驱动
--------------------------------------------------------------------
static int skel_probe(struct usb_interface *interface,
const struct usb_device_id *id)
{
/*...*/
}
--------------------------------------------------------------------
static void skel_disconnect(struct usb_interface *interface)
{
/*...*/
}
4.退出
module_exit(usb_skel_exit);
static void __exit usb_skel_exit(void)
{
/* deregister this driver with the USB subsystem */
usb_deregister(&skel_driver);
}
Reference article: How to Write a Linux USB Device Driver http://www.linuxjournal.com/article/4786?page=0,0