參考2.6.14版本中的driver/usb/input/usbmouse.c。鼠標驅動可分為多個
部分:驅動加載部分、probe部分、open部分、urb回調函數處理部分。
下文陰影部分為注解。
一、??? 驅動加載部分
static int __init usb_mouse_init(void)
{
int retval = usb_register(&usb_mouse_driver);//注冊鼠標驅動
if (retval == 0)
info(DRIVER_VERSION ":" DRIVER_DESC);
return retval;
}
其中usb_mouse_driver的定義為:
static struct usb_driver usb_mouse_driver = {
.owner??????? = THIS_MODULE,
.name??????? = "usbmouse",
.probe??????? = usb_mouse_probe,
.disconnect??? = usb_mouse_disconnect,
.id_table??? = usb_mouse_id_table,
};
假如
注冊成功的話,將會調用usb_mouse_probe。那么什么時刻
才算注冊成功呢?
和其它驅動注冊流程
一樣,只有在其對應的“總線”上發覺
匹配的“裝備
”才會調用probe。總線匹配的要領
和細致
總線有關
,如:platform_bus_type中是判斷驅動名稱和平臺裝備
名稱能不能
相似
;那如何
確認usb總線的匹配要領
呢?
Usb裝備
是注冊在usb_bus_type總線下的。查看usb_bus_type的匹配要領
。
struct bus_type usb_bus_type = {
.name =??????? "usb",
.match =??? usb_device_match,
.hotplug =??? usb_hotplug,