`
buliedian
  • 浏览: 1237628 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

USB设备驱动程序导读(3)

阅读更多

“广告无限,时间有限”,别看广告了,快回来吧。(发现自己是广告天才,不过耳熟的很,好像游戏上面都有类似的话)

此前,我们共同了解了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完成了,我们为了实现自己的设备驱动,只需要利用这些指针或函数,来实现四个我们自己的函数,然后在其中匹配上我们自己的设备就可以了。是不是忒简单,没错,总不能刚开始就把自己吓得不行,那样后面可就没法做了。
分享到:
评论

相关推荐

    wince下USB设备驱动程序导读

    随着USB设备的不断增加,我们这些开发人员也就多了对USB设备进行驱动程序开发的工作。但是对于很多初学者来说,存在以下三个困难: 一是对WinCE的驱动程序结构了解得太少,没办法得心应手的专注于驱动程序的开发...

    USB 驱动程序导读

    ### USB 驱动程序导读 ...通过对WinCE框架的深入理解和样例程序的研究,您可以有效地克服开发过程中遇到的挑战,并最终开发出高效且可靠的USB设备驱动程序。此外,掌握这些知识还将为未来的项目打下坚实的基础。

    嵌入式设计及linux驱动开发指南——基于ARM9处理器.pdf

    6.5.13 和设备驱动程序相关的选项 6.5.14 和文件系统相关的选项 6.5.15 和程序性能分析相关的选项 6.5.16 和内核调试相关的选项 6.5.17 和安全相关的选项 6.5.18 和加密算法相关的选项 6.5.19 库选项 6.5.20 ...

    LPC1300_第10章_USB片上驱动.pdf

    **图10.1 USB设备驱动指针结构体** USB驱动程序使用了0x10000050至0x10000180地址范围内的片上RAM。应用程序不应该使用这个地址范围内的内存。对于使用片上USB驱动程序的应用程序,应该适当地修改连接器控制文件,...

    USB转串口驱动.rar

    标题“USB转串口驱动.rar”表明这是一个包含USB到串口转换器的驱动程序集合,这类设备常用于连接单片机、嵌入式系统或工业设备,以便通过计算机的USB接口进行通信。在描述中提到的“常见USB转串口驱动”,意味着这个...

    usb转串口驱动

    .inf文件包含了设备驱动的配置信息,而.cat文件则是数字签名,用于验证驱动程序的来源和完整性。 2. **Linux驱动**:在"linux"目录中,通常会有源代码或者编译好的动态链接库(.so文件)和配置脚本。Linux系统通常...

    USB转串口驱动支持win7

    在该系统上,可能需要通过USB转串口驱动来连接PC进行程序下载、调试或数据传输,因为TQ2440开发板可能没有直接的USB设备接口或者需要更灵活的数据通信方式。 在提供的标签“win7”中,我们理解这个话题主要关注...

    Linux那些事儿之博客导读

    - **PCI 设备与内核交互**:类似于 USB 设备,PCI 设备也需要通过特定的驱动程序与内核进行交互,以实现对设备的初始化、配置和数据传输等功能。 ### SCSI 设备支持 - **SCSI (Small Computer System Interface)**...

    windows ce Windows mobile的核心资料

    1. 深入剖析windows mobile启动过程 1 2. WinCE驱动开发学习笔记 11 3. 在Windows CE增加自定义中断处理 12 4. WinCE NK.bin与NK.nb0 13 ...8. wince下USB设备驱动程序导读 23 9. Windows CE 下应用程序自动启动 31

    LINUX内核源代码导读 高清扫描有书签目录

    LINUX内核源代码导读 ...http://www.eoeandroid.com/thread-198472-1-1.html 精通LINUX设备驱动程序开发中文扫描版36M http://www.eoeandroid.com/thread-198291-1-1.html 精通Android游戏开发中文扫描版完整版40M ...

    linux 那些事儿全集

    在Linux系统中,HUB驱动程序管理USB集线器,允许连接多个USB设备,并且会讨论如何处理拓扑变化和设备分配。 “Linux那些事儿之我是U盘.pdf”将关注通用串行总线(USB)闪存驱动器。这部分会解释Linux如何识别和处理...

    linux那些事 全九章打包下载.rar

    《Linux那些事》系列文档包含了Linux操作系统的深度解析,涵盖了从基础到核心的多个方面,旨在帮助学习者深入了解Linux内核及其驱动程序的工作原理。这个压缩包提供了九个章节的内容,涉及了USB、PCI、SCSI、Block层...

    PCI Express体系结构导读

    - **兼容性**:尽管PCI Express采用了全新的技术架构,但它在软件层面上与PCI保持了良好的兼容性,这意味着开发者可以利用现有的PCI驱动程序来支持PCIe设备。 #### 四、总结 PCI总线和PCI Express总线是现代计算...

    嵌入式系统开发圣经

    3-5-2 驱动程序的编写 3-5-3 中断与异常处理 3-6 调试技术 3-6-1 仿真软件 3-6-2 目标平台上的调试 3-6-3 硬件辅助调试 3-7 您必须了解的事情 3-7-1 常见的错误处理 3-7-2 程序技巧 3-8 总览 第4章 信息...

    《嵌入式系统开发圣经(第二版)》电子版

    178 3-4-1 系统开发 178 3-4-2 编译 183 3-4-3 链接 189 3-4-4 重新定位 191 3-4-5 下载 192 3-5 沟通软件与硬件的桥梁 194 3-5-1 由说明书认识硬件组件 194 3-5-2 驱动程序的编写 ...

    机械臂-各模块资料-3个版本资料-007 开源PWM机械臂Arduino版本

    - **软件开发**: 附带了基础的驱动程序和简单的控制代码,适合初学者逐步掌握PWM控制原理。 #### 四、配套学习资源 1. **009 赠送学习资料** - 包含了大量的参考资料和技术文档,有助于加深对机械臂工作原理的...

    LPC313x_314x_ARM_BOOKA

    这部分内容提供了所有外围器件的地址分配表,这对于编写正确的驱动程序至关重要。 - **最小系统**:最小系统是指最少数量的组件组合,用于验证硬件是否能正常工作。这部分内容展示了构建一个能够启动并运行简单程序...

Global site tag (gtag.js) - Google Analytics