首页
社区
课程
招聘
[分享]Windows USB功能驱动开发总结
发表于: 2009-9-22 10:03 14961

[分享]Windows USB功能驱动开发总结

2009-9-22 10:03
14961

【文章标题】: 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令牌的内容


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (8)
雪    币: 254
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
学习下文章,在看驱动详解
2009-9-22 10:29
0
雪    币: 236
活跃值: (33)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
3
这个不能得精华?
2009-9-22 13:37
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
在DDK提供的Bulkusb的代码中,PipeInfomation设置有问题,用fileObject保存pipe handle没有道理,需要改成用deviceExtension来保存

这句话就表明这篇文章不能得精华。
2009-9-22 15:31
0
雪    币: 236
活跃值: (33)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
5
为啥,能否详细说明一下?我的设备关联上驱动后,fileObjcet中,的pipe handle的确是空的,并且也没有看到什么地方对给这个变更赋过值
要不放到deviceExtension里保存还有更好的地方?
2009-9-24 16:14
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
谢谢分享~~
2009-9-26 10:42
0
雪    币: 220
活跃值: (59)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
将自已的研究无偿贡献出来供大家学习的都是好同志,顶一个!
2009-9-26 15:48
0
雪    币: 236
活跃值: (33)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
8
或者说您有啥好建议,改一下?谢谢
2009-9-28 18:01
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
学习了,呵呵,谢谢分享,对这方面很感兴趣
2009-10-15 21:13
0
游客
登录 | 注册 方可回帖
返回
//