#include <linux/module.h>
#include <linux/usb.h>
static struct usb_device_id my_usb_table[] = {
{ USB_DEVICE(0x1234, 0x5678) },
{} /* Terminating entry */
};
MODULE_DEVICE_TABLE (usb, my_usb_table);
static int my_usb_probe(struct usb_interface *interface, const struct usb_device_id *id)
{
printk(KERN_INFO "USB device %04X:%04X plugged\n", id->idVendor, id->idProduct);
return 0;
}
static void my_usb_disconnect(struct usb_interface *interface)
{
printk(KERN_INFO "USB device disconnected\n");
}
static struct usb_driver my_usb_driver = {
.name = "my_usb_driver",
.probe = my_usb_probe,
.disconnect = my_usb_disconnect,
.id_table = my_usb_table
};
static int __init my_usb_init(void)
{
int result;
result = usb_register(&my_usb_driver);
if (result < 0) {
printk(KERN_ERR "Failed to register USB driver\n");
return -1;
}
printk(KERN_INFO "USB driver registered\n");
return 0;
}
static void __exit my_usb_exit(void)
{
usb_deregister(&my_usb_driver);
printk(KERN_INFO "USB driver deregistered\n");
}
module_init(my_usb_init);
module_exit(my_usb_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Your Name");
MODULE_DESCRIPTION("A simple USB driver example");
这是个简单的usb驱动程序实例,使用了USB设备ID为0x1234:0x5678
的USB设备。当这个设备被插入时,my_usb_probe()
函数将被调用。当设备被断开时,my_usb_disconnect()
函数将被调用。
要想实现完整的usb 驱动,还需要根据自己的需要完成urb
urb 申请usb_alloc_urb
异步方式:
控制传输初始化usb_fill_control_urb
中断传输初始化usb_fill_int_urb
批量传输初始化usb_fill_bulk_urb
提交urb usb_submit_urb
同步方式:
usb_bulk_msg
usb_interrupt_msg
usb_control_msg
取消urb
usb_unlink_urb
usb_kill_urb