"./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