1. 定義usb支持的設備類型: 當插入的USB設備為該類型的USB時,內核就會調用probe函數。註意要把這個數組寫進設備表裡面: 2. probe函數 2.1 從介面獲得設備,然後列印設備信息: 2.2 在此之前定義結構體: 3. 將結構體註冊進內核: 3.1使用一句話: 3.2 當然也可以使用 ...
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);