usb鼠标驱动注解及测试

usb鼠标驱动注解及测试

ID:32658499

大小:88.49 KB

页数:13页

时间:2019-02-14

usb鼠标驱动注解及测试_第1页
usb鼠标驱动注解及测试_第2页
usb鼠标驱动注解及测试_第3页
usb鼠标驱动注解及测试_第4页
usb鼠标驱动注解及测试_第5页
资源描述:

《usb鼠标驱动注解及测试》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、usb鼠标驱动注解及测试收藏参考2.6.14版本屮的driver/usb/input/usbmouse.Co鼠标驱动可分为儿个部分:驱动加载部分、probe部分、open部分、urb回调函数处理部分。下文阴影部分为注解。一、驱动加载部分staticint_initusb_mouse_init(void){intretval=usb_register(&usb_mouse_driver);//注册鼠标驱动if(retval==0)info(DRIVER_VERSIONDRIVER_DESC);returnretval;}其中usb_mouse_driver的定义为:

2、staticstructusbdriverusbmousedriver={.owner・name.probe.disconnect.id_table=THIS_MODULE,=,'usbmouseH/=usb_mouse_probe,=usbmousedisconnect.=usbmouseidtable,如果注册成功的话,将会调用usb_mouse_probe0那么什么时候才算注册成功呢?和其它驱动注册过程一样,只有在其对应的“总线”上发现匹配的“设备”才会调用probeo总线兀配的方法和具体总线相关,如:platform_bus_type中是判断驱动名称和平台

3、设备名称是否相同;那如何确认usb总线的匹配方法呢?Usb设备是注册在usb_bus_type总线下的。查看usb_bus_type的匹配方法。structbus_typeusb_bus_type={.name=.match=.hotplug=.suspend=.resume=};"usb1;usbdevicematch,usb^hotplug,usb_generic_suspend,usb_generic_resume,其中usb_device_match建义了匹配方法staticintusb_device_match(structdevice*dev,stru

4、ctdevice_driver*drv)structusbjnterface*intf;structusbdriver*usbdrv;conststructusb_device_id*id;/*checkforgenericdriver,whichwedon'tmatchanydevicewith*/if(drv==&usb_generic_driver)return0;intf=to_usb」nterface(dev);usb_drv=to_usb_driver(drv);id=usb_match_id(intf,usb_drv->id_table);if(id

5、)return1;return0;}可以看出usb的匹配方法是usb_match_id(intf,usb_drv->id_table),也就是说通过比对“dev屮intf信息”和“usb_drv->id_table信息”,如果匹配则说明驱动所对应的设备已经添加到总线上了,所以接下了就会调用drv中的probe方法注册usb设备驱动。usb_mouse_id_table的定义为:staticstructusb_device_idusb_mouse_id_table[]={#defineUSB」NTERFACE」NFO(cl,sc,pr).match_flags=U

6、SB_DEVICE_ID_MATCH_INT_INFO,.blnterfaceClass=(cl),.blnterfaceSubClass=(sc),.blnterfaceProtocol=(pr)鼠标设备遵循USB人机接口设备(HID),在HID规范中规定鼠标接口类码为:接口类:0x03接口子类:0x01接口协议:0x02这样分类的好处是设备厂商可以直接利用标准的驱动程序。除了HID类以外还有Massstorage>printer^audio等#defineUSB_DEVICE_ID_MATCH_INT_INFO(USBDEVICEIDMATCHINTC

7、LASSUSBDEVICEIDMATCHINTSUBCLASS

8、USBDEVICEIDMATCHINTPROTOCOL)兀配的过程为:usb_match_id(structusb_interface*interface,conststructusb_device_id*id){structusb_host_interface*intf;structusb_device*dev;/*proc_connectinfoindevio.cmaycalluswithid==NULL.*/if(id==NULL)returnNULL;intf=interface->cur_a

9、ltset

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。