linux usb 鼠标驱动程序详解

linux usb 鼠标驱动程序详解

ID:11698220

大小:99.50 KB

页数:12页

时间:2018-07-13

linux usb 鼠标驱动程序详解_第1页
linux usb 鼠标驱动程序详解_第2页
linux usb 鼠标驱动程序详解_第3页
linux usb 鼠标驱动程序详解_第4页
linux usb 鼠标驱动程序详解_第5页
资源描述:

《linux usb 鼠标驱动程序详解》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、USB总线引出两个重要的链表!一个USB总线引出两个重要的链表,一个为USB设备链表,一个为USB驱动链表。设备链表包含各种系统中的USB设备以及这些设备的所有接口,驱动链表包含USB设备驱动程序(usbdevicedriver)和USB驱动程序(usbdriver)。 USB设备驱动程序(usbdevicedriver)和USB驱动程序(usbdriver)的区别是什么?USB设备驱动程序包含USB设备的一些通用特性,将与所有USB设备相匹配。在USBcore定义了:structusb_device_driverus

2、b_generic_driver。usb_generic_driver是USB子系统中唯一的一个设备驱动程序对象。而USB驱动程序则是与接口相匹配,接口是一个完成特定功能的端点的集合。 设备是如何添加到设备链表上去的?在设备插入USB控制器之后,USBcore即会将设备在系统中注册,添加到USB设备链表上去。 USB设备驱动程序(usbdevicedriver)是如何添加到驱动链表上去的?在系统启动注册USBcore时,USB设备驱动程序即将被注册,也就添加到驱动链表上去了。 接口是如何添加到设备链表上去的?在USB设

3、备驱动程序和USB设备的匹配之后,USBcore会对设备进行配置,分析设备的结构之后会将设备所有接口都添加到设备链表上去。比如鼠标设备中有一个接口,USBcore对鼠标设备配置后,会将这个接口添加到设备链表上去。 USB驱动程序(usbdriver)是如何添加到驱动链表上去的?在每个USB驱动程序的被注册时,USB驱动程序即会添加到驱动链表上去。比如鼠标驱动程序,usb_mouse_init函数将通过usb_register(&usb_mouse_driver)将鼠标驱动程序注册到USBcore中,然后就添加到驱动链表

4、中去了。其中usb_mouse_driver是描述鼠标驱动程序的结构体。 已配置状态(configuredstatus)之后话当鼠标的设备、接口都添加到设备链表,并且鼠标驱动程序也添加到驱动链表上去了,系统就进入一种叫做已配置(configured)的状态。要达到已配置状态,将经历复杂的过程,USBcore为USB设备奉献着无怨无悔。在这个过程中,系统将会建立起该设备的的设备、配置、接口、设置、端点的描述信息,它们分别被usb_device、usb_configuration、usb_interface、usb_hos

5、t_interface、usb_host_endpoint结构体描述。设备达到已配置状态后,首先当然就要进行USB驱动程序和相应接口的配对,对于鼠标设备来说则是鼠标驱动程序和鼠标中的接口的配对。USBcore会调用usb_device_match函数,通过比较设备中的接口信息和USB驱动程序中的id_table,来初步决定该USB驱动程序是不是跟相应接口相匹配。通过这一道关卡后,USBcore会认为这个设备应该由这个驱动程序负责。然而,仅仅这一步是不够的,接着,将会调用USB驱动程序中的probe函数对相应接口进行进一

6、步检查。如果该驱动程序确实适合设备接口,对设备做一些初始化工作,分配urb准备数据传输。当鼠标设备在用户空间打开时,将提交probe函数构建的urb请求块,urb将开始为传送数据而忙碌了。urb请求块就像一个装东西的“袋子”,USB驱动程序把“空袋子”提交给USBcore,然后再交给主控制器,主控制器把数据放入这个“袋子”后再将装满数据的“袋子”通过USBcore交还给USB驱动程序,这样一次数据传输就完成了。以下是完全注释后的鼠标驱动程序代码usbmouse.c[cpp] viewplaincopy1./* 2. *

7、 $Id: usbmouse.c,v 1.15 2001/12/27 10:37:41 vojtech Exp $ 3. * 4. *  Copyright (c) 1999-2001 Vojtech Pavlik 5. * 6. *  USB HIDBP Mouse support 7. */  8.  9.#include    10.#include    11.#include    12.#include 

8、/init.h>   13.#include    1.#include    2.  3./* 4. * Version Information 5. */  6.#define DRIVER_VERSION "v1.6"   7.#define DRIVER_AU

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

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

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