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

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

阅读更多
在上次了解了所有USBD接口函数以后,我们已经有了很多基础知识了,回顾USB样例的文件夹结构,我们还能记得USB\CLASS\COMMON这个文件夹下是存放所公共部分的源程序,它是微软专门抽象出来的能为大多数USB设备驱动程序服务的一些结构体以及函数的封装,我们这次再来概略的了解一下这里面的源程序。

这里面包含了三个程序,分别是:
remlock usbclient utils
下面我们分别来了解一下这三个程序的功能和接口,很显然,USB设备驱动程序肯定是会用到这其中的一部分函数的,因此我们不一定需要读懂这其中的每一行,但至少要对这些函数有个印象,不至于在读驱动程序时不知道函数的来源。

remlock程序是一个移除设备的锁,利用这个结构体
typedef struct _REMOVE_LOCK
{
BOOL Removed;
LONG IoCount;
HANDLE RemoveEvent;
} REMOVE_LOCK, *PREMOVE_LOCK
来实现在设备移除时进行的同步控制。其中Removed成员是对设备是否已经移除的标识,IoCount成员是对设备进行访问的数量,这也是驱动程序中常用的行为,就像此前我们看到的那个Lock程序一样,RemoveEvent是一个内核事件,熟悉WIN32编程的应该都很清楚,它是内核通知应用程序的一种方式,也是线程这间并发控制的一种手段,如果不熟悉,还是像我在以前文章中提到的那样,一定要找WINDOWS高级编程之类的书把它学明白,否则就很难控制驱动程序了。

利用它实现的那几个函数就不说了,与临界区的用法是一样的。另外提一句,在此程序中有类似InterlockedIncrement这样的函数,这种函数是WIN32 API函数,专门用来提供多线程对同一变量的同步访问的,可以通过MSDN查到详细用法。

usbclient程序是对USBD进行包装以供USB设备驱动程序使用的函数接口,通过usbclient.h我们可以发现里面是关于数据传输、属性设置、状态描述和复位的一组函数原形的定义,我们再看usbclient.c文件,这些函数大部分都拥有一个LPCUSB_FUNCS类型的参数,回顾上次我们对USBD的了解可知,正是通过这一参数才能访问USBD提供的服务功能,浏览一下函数的实现发现,确实每个函数都是通过这个参数调用了USBD的函数,然后处理调用后的结果,所以这里只是多了一层封装,使得驱动程序的编写更加清晰易于维护。

另外,这里我们要留意一下IssueBulkTransfer()、IssueInterruptTransfer()、IssueVendorTransfer() 这三个函数,它们实现了通用的Bulk传输、中断传输和自定义的传输方式,在驱动程序中要用得到。

utils程序很简单,是对注册表操作的封装,利用_REG_VALUE_DESCR这个结构体和GetSetKeyValues()函数可以方便的访问注册表,在驱动程序的安装中会用得较多。

又说了这么多东西,虽然没有看多少程序,但我们又离驱动程序近了一层,至少知道了很多函数是要在驱动程序中用到的,如果有兴趣,可以具体阅读每一个函数的实现方法,但我觉得这并不影响对驱动程序的开发。如果是我写驱动,在没有特别的情况下,我会把这些公用的源程序照搬过来,这可是能极大的缩短开发周期的事哦!
分享到:
评论

相关推荐

    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

    4. "windows" - 这是Windows操作系统的驱动程序,涵盖了从Windows XP到Windows 10等多种版本,因为USB转串口设备在Windows上的兼容性是关键。 5. "winCE" - Windows CE是微软开发的一个嵌入式操作系统,这个目录下...

    usb转串口驱动

    4. **驱动安装导读.txt**:这个文件很可能是驱动安装指南,详细说明了如何在各个操作系统上安装和配置驱动程序。用户应该首先阅读这份指南,以了解具体步骤和注意事项。 5. "mac"和"IC-0108"、"IC-340"目录:这些...

    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

    4. **Linux那些事儿之我是Hub.pdf**:USB Hub是连接多个USB设备的设备,这一章将讲述Linux内核如何管理和控制USB Hub,包括设备的连接、断开、功率管理等。 5. **Linux那些事儿之我是USB+Core(v1[1].0).pdf**:这...

    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