欢迎来到天天文库
浏览记录
ID:11698220
大小:99.50 KB
页数:12页
时间:2018-07-13
《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
8、/init.h> 13.#include 1.#include 2. 3./* 4. * Version Information 5. */ 6.#define DRIVER_VERSION "v1.6" 7.#define DRIVER_AU
此文档下载收益归作者所有