vxworks-usb-mouse-driver分析

vxworks-usb-mouse-driver分析

ID:1539088

大小:66.83 KB

页数:19页

时间:2017-11-12

vxworks-usb-mouse-driver分析_第1页
vxworks-usb-mouse-driver分析_第2页
vxworks-usb-mouse-driver分析_第3页
vxworks-usb-mouse-driver分析_第4页
vxworks-usb-mouse-driver分析_第5页
资源描述:

《vxworks-usb-mouse-driver分析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Vxworksusbmouse驱动分析概述:最近在做嵌入式vxworks下usb触摸屏设计,参考了vxworks里面的usbmouse驱动的代码,分析了usbmouse驱动,根据自己的理解,写这个文档。如有任何问题请联系yxj_5421@163.com,转载请标明出处。系统资源:Vxworks6.71、USB主机驱动栈模型原理USB主机驱动栈模型下图所示:1.1硬件层在USB主机驱动栈的最底部是USB主控制器(USBHC,即USBHostController)。目前,USB主控制器可分为三类:通用型主控制器接口(UHCI)、开放型主控制器接口(OHCI)和增强型主控制接口和增

2、强型主控制接口(EHCI)。其中,UHCI和OHCl支持USBl.1低速接口,EHCl支持USB2.0高速接口。1.2主控制器驱动层对予每一类型的主控制器都有一个与硬件独立的USB主控制器驱动(HostControllerDriver,简称HCD)。WindRiver提供了两个驱动:usbHedUheiLib(UHCI主控制器库)和usbHcdohciLib(OHCl主控制器库)。该模块向下直接与USB主控制器硬件进行交互操作,向上与USBD层的功能接口,提供各种功能函数的调用,支持对上层模块封装具体的HCD驱动的实现。1.3USB核心驱动层USB核心驱动(USBhostdr

3、iver,简称USBD)模块实现USB的核心驱动,包括USB总线的枚举、总线带宽分配、传输控制等操作。该模块向下调用HCD接口模块,实现与HCD层的通信,将设备驱动的功能请求转化为相应功能模块的调用。USBD管理每一个与主机相连的USB设备,还负责自动处理USB电力管理和带宽管理及USBhub和设备的动态插拔。1.4USB设备驱动层USB设备驱动层负责管理连接到USB上的不同类型的设备,它们依靠USBD来提供与每个设备的通信路径,主要实现USB设备的一些特定初始化工作,并将上层用户应用程序的请求转化为对相应的USBD驱动程序的调用。该层通过对应用层提供API函数,从而屏蔽US

4、B实现的细节。1.5应用层应用层为用户编写的对USB设备进行读、写控制等指定功能的应用程序,应用层通过设备驱动程序和USB主机驱动程序完成指定的功能。2、USBmouse驱动分析Usbmouse驱动属于设备驱动层,在vxworks里面,把usbmouse驱动设计成两层,即文件层+驱动层,文件层对上提供read、write、ioctl等接口,对下调用驱动层提供函数进行硬件初始化,对应的源代码是usrUsbMseInit.c(targetconfigcompssrc)。驱动层则针对具体usb设备初始化,获取数据等。2.1文件层usrUsbMseInit.c分析在usrRoo

5、t(usrConfig.c(targetconfigall))调用#ifdefINCLUDE_USB_MOUSE_INITusrUsbMseInit();/*MouseDriverInitialization*/#endifusrUsbMseInit(usrUsbMseInit.c(targetconfigcompssrc))驱动程序入口点,首先检查driver是否已经安装,如果安装就退出if(usbMseDrvNum>0){printf("Mousealreadyinitilaized.");returnERROR;}接着调用usbMseDrvNum=iosD

6、rvInstall((FUNCPTR)NULL,(FUNCPTR)usbMseDevDelete,(FUNCPTR)usbMseOpen,(FUNCPTR)usbMseClose,(FUNCPTR)usbMseRead,(FUNCPTR)usbMseWrite,(FUNCPTR)usbMseIoctl);安装驱动的I/O函数,添加驱动到驱动表里面接着调用驱动层初始化函数if(usbMouseDevInit()==OK)usbMouseLib.c(targetsrcdrvusb){printf("usbMouseDevInit()returnedOK");这个函数如果

7、成功,会输出打印上面的信息表明驱动已经加载,并且和usb设备已经匹配上。接着调用驱动层动态注册函数if(usbMouseDynamicAttachRegister(usbMseDrvAttachCallback,(void*)NULL)!=OK)usbMouseLib.c(targetsrcdrvusb)这个函数会把usbMseDrvAttachCallback保存在驱动层创建的一个队列里面,当usb设备热插拔时,都会调用这个函数。如果已经插入了usbmouse,就会马上调用usbMseDrvAt

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

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

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