usb驱动之打印usb设备信息(一)
1. 定义usb支持的设备类型:
1 static const struct usb_device_id mouse_table[] = { 2 { USB_INTERFACE_INFO(USB_INTERFACE_CLASS_HID, USB_INTERFACE_SUBCLASS_BOOT, 3 USB_INTERFACE_PROTOCOL_MOUSE) }, /* mouse */ 4 { }/* Terminating entry */ 5 };
当插入的USB设备为该类型的USB时,内核就会调用probe函数。注意要把这个数组写进设备表里面:
MODULE_DEVICE_TABLE (usb, mouse_table);
2. probe函数
2.1 从接口获得设备,然后打印设备信息:
struct usb_device *udev = interface_to_usbdev(interface); //设备 printk("VID = 0x%x,PID = 0x%x",udev->descriptor.idVendor,udev->descriptor.idProduct);
2.2 在此之前定义结构体:
static struct usb_driver usb_driver = { .name = "mouse", .probe = mouse_probe, .disconnect = mouse_disconnect, .id_table = mouse_table, };
3. 将结构体注册进内核:
3.1使用一句话:
module_usb_driver(usb_driver);
3.2 当然也可以使用万能模板module_init注册
1 static int usb_drv_init(void) 2 { 3 usb_register(&usb_driver); 4 return 0; 5 } 6 7 static void usb_drv_exit(void) 8 { 9 usb_deregister(&usb_driver); 10 } 11 12 module_init(usb_drv_init); 13 module_exit(usb_drv_exit);