标 题:Windows USB功能驱动开发总结
作 者:yybing
时 间:2009-09-22 10:03
链 接:http://bbs.pediy.com/showthread.php?t=98263
【文章标题】: Windows USB功能驱动开发总结
【文章作者】: yybing
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------

最近做了一个USB设备的功能驱动,并对其速度的瓶颈做了一些分析,最后找到了影响此设备的速度的主要原因。由于USB设备的通用性,代码的主体直接使用DDK提供的示例代码:Bluckusb。从正确编译到能正常读写数据有几个关键点,总结了一下,特与大家分享,有不足之处请不吝赐教。

1、 USB驱动结构图

图表 1:USB设备层次结构
    USB主控制器与其它I/O设备一样直接连接到系统总线上。操作系统与主控制器通信使用I/O口或内存寄存器,通过普通的中断信号,系统可以接受主控制器的事件通知。主控制器连接一棵USB设备树。一种称为hub的设备作为其它设备的连接点。多个hub能以菊链方式连接,可以连接到USB规范中定义的最大深度。其它设备,如照相机、麦克风、键盘等等,直接连到hub上。为了精确地表达概念,USB使用术语function来描述非hub设备。

2、 写USB功能驱动需要了解的内容
a.  驱动编译方法
各种入门书上都有介绍,用DDK的Dos环境编译时,错误信息会在Dos界面显示,如果这些信息不能定位问题,可以到代码目录下找名字为buildxx的log文件。
b.  驱动与设备的关联
驱动与设备的关联是靠INF文件来指定的。简单来说只要把DDK中提供的USB驱动示例中的INF文件中的VID_XXXX和PID_XXXX中的XXXX换成自己设备的VID和PID值,[SourceDisksFiles]节中BULKUSB.sys 换成自己的驱动文件名称就可以使驱动和设备关联。更多INF文件介绍可以参考相关介绍文档。
c.  设备自定义的命令
自定义的设备,一般都会自定义一些控制命令,在写驱动时,需要了解这些命令的作用,在调试时方便定位问题所在。
此处需要把IoControl命令和设备命令区分开,IoControl命令是应用程序与驱动进行交互的命令,IoControl命令的生成与设备没有直接关系,可以随意设置只要不与驱动的标准命令发生冲突就可以;设备命令是在令牌阶段使用,也即Setup包,设备命令由硬件设计者要定义,设备命令是主机和设备通信的第一步。
 
图表 2:SETUP令牌的内容
d.  USB驱动与设备交互的方式
Windows中通过发送URB和USB设备进行通信备,各种函数代码中的核心是构造URB,发送URB,Setup包(令牌包)中的信息也被包含在URB中。为了方便构造URB,DDK提供了一组宏函数,使用宏函数可以很方便构造不同类型的URB,构造Setup包的宏为UsbBuildVendorRequest ,其中index,value,request在硬件中会用到。
3、 正确读写数据的关键点

USB设备读写主要由是通过端点来进行,一个端点的数据流方向只能有一个IN或者OUT。端点存在于接口中,接口由配置时取得,配置主要在IRP_MJ_CREATE的Dispatch函数里执行。配置、接口与端点的关系如下图所示。在DDK提供的Bulkusb的代码中,PipeInfomation设置有问题,用fileObject保存pipe handle没有道理,需要改成用deviceExtension来保存;UsbInterfaces中,Pipes数组至少有两个元素,一个是写数据时用的Handle,一个是读数据时用的Handle,在我的设备中Pipes[0]写,Pipes[1]写。
 
图表 3:USB设备的配置、接口、端点

4、 调试驱动的工具

查看打印信息,需要用DbgView;要跟踪驱动代码用Windbg,串口线进行双机调试,调试前需要下载被调试机的符号文件;测试并且查看USB读写数据,用Bus Hound,USBlyzer配合使用;驱动代码编辑用Source Insight;代码编译直接用DDK提供的编译环境即可。

附件为改造后的驱动代码
 bulkusb.rar

--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

2009年09月22日 09:39:16

Windows USB功能驱动开发总结相关推荐

  1. Windows文件系统过滤驱动开发教程(4)

    Windows文件系统过滤驱动开发教程 4.设备栈,过滤,文件系统的感知 前边都在介绍文件系统驱动的结构,却还没讲到我们的过滤驱动如何能捕获所有发给文件系统驱动的irp,让我们自己来处理?前面已经解释 ...

  2. Windows 文件系统过滤驱动开发教程 (第二版)

    Windows 文件系统过滤驱动开发教程 (第二版)       楚狂人-2007-上海 (MSN:walled_river@hotmail.com)          -1.  改版序....... ...

  3. WinCE平台USB摄像头驱动开发

    (转载)http://tech.e800.com.cn/articles/2009/116/1257487620781_1.html 由于良好的性能.低廉的价格和灵活方便的特性,USB 摄像头正被广泛 ...

  4. 浅谈WinCE平台USB摄像头驱动开发流程

    转自http://tech.e800.com.cn/articles/2009/116/1257487620781_1.html 由于良好的性能.低廉的价格和灵活方便的特性,USB 摄像头正被广泛的集 ...

  5. Windows CE设备驱动开发之电源管理

    4.7电源管理 电源管理模块管理设备电源,从而全面改进操作系统的电源使用效率:它所有设备的电源使用,同时能与不支持电源管理的应用程序及驱动程序共存. 使用电源管理可以有效的减少目标设备的电源消耗,同时 ...

  6. 电源管理 第二部分 ---- Windows CE设备驱动开发之电源管理

    Windows CE设备驱动开发之电源管理      第二部分 4.7.2.电源状态 电源管理器期望所有被管理的设备能支持一个或多个设备电源状态.设备电源状态的数量是有限的.设备必须通知电源管理器其功 ...

  7. USB WDM驱动开发实例 bulkusb

    参考书籍<<Windows驱动开发技术详解>> 1.该示例介绍如何进行USB驱动的开发. 它全面地支持了即插即用的处理, 也很全面地支持了电源管理,同时很好地支持了USB设备的 ...

  8. USB设备驱动开发之扩展(利用USB虚拟总线驱动模拟USB摄像头)

    fanxiushu 2016-10-08 转载或引用,请注明原始作者 做这个事情写这篇文章之前,压根没朝模拟USB摄像头这方面去想过. 直到CSDN上一位朋友提出问题,才想到还有这么一个玩意. 因此花 ...

  9. windows USB读卡器驱动详解

    目标 在windows 2000及以上版本的操作系统中,开发usb读卡器驱动.实现数据批量传输功能,同时需要根据特定的协议(协议可自定义)进行通信.实现一个基于此usb驱动的动态库(统一接口),供上层 ...

  10. 如何正确入门Windows系统下驱动开发领域?

    [作者] 猪头三 作者网站: http://www.x86asm.com 原文链接: http://blog.csdn.net/Code_GodFather/...0/5975901.aspx [贡献 ...

最新文章

  1. sort uniq命令
  2. 《Swift开发实战》——导读
  3. git没有冲突 但是提示有_git 代码冲突处理
  4. 与外系统连接时,需要考虑的问题
  5. 常微分方程的初始条件使用
  6. java实现人脸识别源码【含测试效果图】——前期准备工作及访问提示
  7. DoIP协议:通用DoIP首部否定确认码02和03的区别
  8. 《浏览器播放RTSP方案》之 VLC插件播放RTSP视频流
  9. 分布式系统可用性与一致性
  10. jmeter性能测试步骤入门
  11. GwcNet:逐组相关的立体匹配网络(CVPR 2019)
  12. oracle数据库表数据误删除恢复
  13. c语言中的pow(x, y)的使用
  14. 【题解】洛谷P1373 小a和uim之大逃离(dp 递推)
  15. esri wkt转rings json字符串 java
  16. 24V-2A矿用本安电源设计
  17. 站在Z时代社交风口 融云打造语音聊天室新模式
  18. 历史上的今天:“超级计算机之父”诞生;三星推出移动支付;LibreOffice 发布...
  19. 【问题】win10系统IE或Edge访问网页未响应或卡死
  20. zoj 1377 Grandpa‘s Estate

热门文章

  1. 如何将WebRoot部署到tomcat中
  2. 全球及中国紧急警报系统EAS行业竞争格局及市场前景预测分析报告2022-2028年
  3. 机器人学——机器人导航
  4. 偏执的interviewee
  5. 安卓手机投屏到win10电脑
  6. 简易解inode802.1x认证实战(6)交叉编译
  7. ppt背景图片怎么更换应用到全部
  8. python mro算法_Python -- mro算法
  9. IMDB 电影打分规则
  10. 上海大学计算机学院领军人物,上海大学计算机工程与科学学院研究生导师简介-谢 江高级工程师...