"./drivers/usb/usb-skeleton.c"是內(nèi)核提供給usb設(shè)備驅(qū)動(dòng)開發(fā)者的海量存儲(chǔ)usb設(shè)備的模板程序, 程序不長(zhǎng), 通用性卻很強(qiáng),十分經(jīng)典, 深入理解這個(gè)文件可以幫助我們更好的理解usb子系統(tǒng)以及usb設(shè)備驅(qū)動(dòng)框架, 寫出更好的usb海量存儲(chǔ)設(shè)備驅(qū)動(dòng)。

匹配前

既然是一個(gè)usb設(shè)備驅(qū)動(dòng)的模板,那么就少不了構(gòu)造一個(gè)usb_driver對(duì)象并將其注冊(cè)到內(nèi)核中,

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);

關(guān)于這個(gè)對(duì)象的域,在上一篇已經(jīng)解釋了,這里,我們主要關(guān)心的是skel_table,它決定了這個(gè)驅(qū)動(dòng)匹配到哪個(gè)設(shè)備,從下面的定義可以看出,這個(gè)驅(qū)動(dòng)是按照device進(jìn)行匹配的,

 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
        
		

網(wǎng)友評(píng)論