“广告无限,时间有限”,别看广告了,快回来吧。(发现自己是广告天才,不过耳熟的很,好像游戏上面都有类似的话)
此前,我们共同了解了USB驱动在CE中的位置结构,也了解了样例驱动程序的文件夹结构,接下来,我们就要了解一下USBD为我们提供了哪些接口来实现设备访问以及驱动程序管理的功能。找到USBDI.H,不要告诉我你找不到吧,不管你用什么编辑器,记事本也好,PB也好,VC/EVC或者VS都行,打开它,我们一起来了解一下USBD为我们提供了什么。
我们首先看到的一个大的结构体就是_USB_DRIVER_SETTINGS,注意这个结构体不是USB规范中的USB设备描述,而是为了CE设备管理器加载USB设备驱动程序方便而建立的。该结构体中对供应商描述、设备描述和Interface的描述是用来匹配注册表中对USB设备驱动的注册表键,当设备管理器发现你设备的这些值与注册表中的这些值相符时,就会加载你的驱动。也就是说它是与你的设备唯一对应的东西,是一种标识。该结构体的供应商部分的描述需要根据你的设备的供应商信息来填,设备描述的设备类、子类、协议等可以在USB规范中找到,在USB100.H头文件中也有一部分,在后面的样例程序中也定义了一部分。
在接下来有三个函数是必须由USB设备驱动程序实现的,这也就是我们在MSDN里或其他CE的文档里所看到的,这几个函数就是: USBDeviceAttach:设备加载的时候由系统调用 USBInstallDriver:设备第一次加载的时候由系统调用,用来安装注册表配置以便搜索设备 USBUnInstallDriver:设备移除后清理由上一个函数写入的注册表配置
这样在我们的驱动程序中就一定要按照这三个函数的原型来实现,否则就不能为设备管理器所识别。其实除了这三个,个我觉得第四个也是必须的,这就是一个函数指针所指向的函数: *LPDEVICE_NOTIFY_ROUTINE 这个指针所指向的函数是用来接收通知消息的,既然微软说任何USB设备必须实现USB_CLOSE_DEVICE消息的响应,那么这个指针所指向的函数自然也就是必须要实现的了。
继续向下看,是一组函数的原型,这些函数就是USBD向设备驱动程序提供的服务接口,有些函数是可以任意调用的,用来完成版本信息读取、注册表操作和设备驱动程序注册,这些函数有: GetUSBDVersion RegisterClientDriverID UnRegisterClientDriverID RegisterClientSettings UnRegisterClientSettings OpenClientRegistryKey
还有大量的函数是必须通过指针调用的,通常只允许在驱动程序中调用,为了方例使用,在这里给出一个_USB_FUNCS的结构体,每一个结构体成员对应了一个函数指针,这样在驱动程序中要想使用USBD函数只能通过一个结构体变量来进行了,在这里我们要记住这个结构体的名字,并且微软还对这个结构体变量进行了以下的类型定义: typedef struct _USB_FUNCS USB_FUNCS, * PUSB_FUNCS, * LPUSB_FUNCS; typedef struct _USB_FUNCS const * PCUSB_FUNCS; typedef struct _USB_FUNCS const * LPCUSB_FUNCS;
好了,到此我们发现,大部分的USB工作都已经被USBD完成了,我们为了实现自己的设备驱动,只需要利用这些指针或函数,来实现四个我们自己的函数,然后在其中匹配上我们自己的设备就可以了。是不是忒简单,没错,总不能刚开始就把自己吓得不行,那样后面可就没法做了。
|
相关推荐
Linux下USB设备驱动程序的编写.pdf
随着USB设备的不断增加,我们这些开发人员也就多了对USB设备进行驱动程序开发的工作。但是对于很多初学者来说,存在以下三个困难: 一是对WinCE的驱动程序结构了解得太少,没办法得心应手的专注于驱动程序的开发...
Linux系统下USB设备驱动程序的开发
LINUX设备驱动程序之USB驱动程序LINUX设备驱动程序之USB驱动程序LINUX设备驱动程序之USB驱动程序
首先整体上简要介绍了USB及其通信模型,然后详细讨论了Windows的WDM驱动程序模型,重点阐述了基于WDM的USB设备驱动程序的具体开发过程。最后给出了当前流行的几种USB设备驱动的开发工具及其特点。通过设计USB设备驱动...
关于linux下怎么编写USB设备驱动,讲述了USB基础知识,编写方法
基于Windows+WDM的USB设备驱动程序开发与应用,讲述USB驱动开发的全过程。
USB设备驱动程序开发 详细介绍USB开发过程以及cypress开发
基于uCLinux嵌入式平台上USB设备驱动程序开发 基于uCLinux嵌入式平台上USB设备驱动程序开发
TMS320VC5509设备端USB设备驱动程序源文件
介绍了USB的相关概念及Linux中USB设备驱动程序的框架和重要数据结构。通过设计和实现一个典型的例子,总结了Linux下编写一个USB设备驱动程序的一般方法和技巧。
USB download gadget驱动
万能摄像头驱动程序自动检测摄像头芯片,集成了301、303、168、268、325、211、308、380等市面基本所有方案。不用再担心不知道自己摄像头是什么芯片,不用再担心丢失了驱动程序就无法再使用了!
论文:WindowsXP环境下USB设备驱动程序的开发.pdf
用 DriverWorks开发USB设备驱动程序
USB设备驱动程序与上层应用软件的IO操作设计
基于Linux的USB设备驱动程序实现.pdf
基于EFI的USB设备驱动的开发 ...以USB设备驱动程序开发为例,描述了EFI下设备驱动程序开发的一般过程和方法。包括EFI下驱动模式的分析,USB协议架构和传送方式的解析,以及如何开发EFI下的USB设备驱动程序。
用VC++ 实现USB设备驱动程序的实战实例。学习学习
USB3.0驱动安装包(在winpe下运行)usb3.0驱动程序下载 安装完windows后,认不到鼠标键盘,是因为没有安装usb3.0驱动。处理方法:拷此工具到U盘,然后U盘启动进入winpe,在winpe里运行此工具,提示成功后重启进入...