"./drivers/usb/usb-skeleton.c"是内核提供给usb设备驱动开发者的海量存储usb设备的模板程序, 程序不长, 通用性却很强,十分经典, 深入理解这个文件可以帮助我们更好的理解usb子系统以及usb设备驱动框架, 写出更好的usb海量存储设备驱动。

匹配前

既然是一个usb设备驱动的模板,那么就少不了构造一个usb_driver对象并将其注册到内核中,

650 static struct usb_driver skel_driver = {651         .name =         "skeleton",652         .probe =        skel_probe,653         .disconnect =   skel_disconnect,654         .suspend =      skel_suspend,655         .resume =       skel_resume,656         .pre_reset =    skel_pre_reset,657         .post_reset =   skel_post_reset,658         .id_table =     skel_table,659         .supports_autosuspend = 1,660 };661 662 module_usb_driver(skel_driver);

关于这个对象的域,在上一篇已经解释了,这里,我们主要关心的是skel_table,它决定了这个驱动匹配到哪个设备,从下面的定义可以看出,这个驱动是按照device进行匹配的,

 30 static const struct usb_device_id skel_table[] = { 31         { USB_DEVICE(USB_SKEL_VENDOR_ID, USB_SKEL_PRODUCT_ID) }, 32         { }                                     /* Terminating entry */
 33 }; 34 MODULE_DEVICE_T