详细解析Windows usb驱动和Linux usb驱动的相似和差异


0 前言

很早以前就想写点东西来总结windows 下usb开发和linux 下usb 驱动开发的异同了,今天主要从相同点和不同点进行讲解吧,对于两个平台下usb驱动开发,usb协议是相同的,咱们先从usb协议开始谈起,然后讲解windows下usb驱动开发的方法,主要介绍3种方法,dw 3.2+DDK;WDM下DDK开发和WDF下KMDF Usb驱动开发。

虽然dw已经被WDF赶下台了,但是我这里还是要讲讲dw开发驱动程序的东西,因为我的第一个驱动程序就是采用dw+ddk 2600开发的,至今我都记得当时开发驱动的情景,那种感觉真的希望神仙来指路啊。在开发第一个usb驱动程序之前我没有做过驱动的经验,甚至都不知道,驱动是干嘛的。但是临危受命,只有往前冲,没有回头路,因为回头就意味着枪毙(被辞职,08年的流行语,被)。没有回头路,那就往前走呗。

没有文档,没有原理图,甚至连数据手册都没有给我,就跟我讲了讲这个项目要做什么工作。当时一片茫然,真希望神仙来指路。拿到项目需求,其实是口头上的,呵呵,没有 一行字的文档。没有办法,一边学习,一边做需求分析,请教做过这些事情的同事和同学。到csdn和国外的论坛发帖狂问。一边搜开发驱动的工具,比如ddk,dw等等,那个时候国内还没有人用WDF模型做驱动开发。

那时的水平真的就是一个字来形容,菜。搜了一大通,感觉还是用dw 吧,感觉还是挺比较容易用,选用了开发工具后,就不分昼夜的学习。有时工作到凌晨2点,雷锋同志说的好,时间就像乳沟,要挤还是有的,呵呵,中午也不休息了,干活,干活,干活。一个星期过去了没有一点进展,2个星期过去了,终于把需求搞明白了,这个时候,对dw+ddk+vc的开发环境也搭起来了,也买了几本书,每一本书都讲到关键的地方没了,呵呵,真气人啊。

神阿,救救我吧!老大每天都过来问一下,有什么进展了吗?唉,我每次都对着他笑笑,还好,老大还对我不错,要我好好的静下心来,理一理思路。当时他也帮我找找资料,但是后面证明都是没用的,呵呵,因为公司没有人做过usb驱动。

3个星期过去了,柳岸花明又一村,我终于可以往硬件发送控制命令了,但是硬件还没有给我回送数据。没办法,用bus hound 一抓包,看到有数据了,我兴奋了一吧。呵呵,终于看到了希望,看到了未来,那时候感谢党,感谢毛主席,心情澎湃了一个小时。

实验证明,希望越大,失望越大,我以为就要做出来了,但是没想到还是万里长征走完第一步,后面的路还很长,我们必须保留……。我后面就去写函数去读端点中的数据,但是一直都读不到,呵呵,调啊 调啊。希望会有的,面包会有的,我一直坚信自己,从来不怀疑自己的能力。

第4个星期的早上,我早早的就去上班了,还是坐在那里,安安静静的写代码,调程序,也不和别人说话,不断地看别人的代码,看dw上的例子,看ddk的例子。当时一个星期比我一个月看的东西还要多,总结一句话,静下心来看源码,源码就会像看故事会那样简单。第4个星期的星期3了。也是上午快吃中饭的时候,终于看到硬件不断的给我传数据了,我还是用bus hound抓包,数据是那么的正确,当时的心情是怎样的激动,我无法形容,现在都过去几年了,都清楚地记得,我当时吼了一声,公司的人都看着我,现在回想起来是那么的幼稚。一个驱动程序,一段不寻常的经历,让我想起一句话:没有压力,没有动力,不经历风雨怎能见彩虹。

以上就是我第一次做usb驱动的一段经历,那时流行采用dw+ddk开发驱动程序,现在开发dw软件的公司都停止开发了,多么可惜的一件事情啊,这么优秀的软件,这么易用的软件,就这样被淘汰了,最终将它的版本定格在3.2。但是国内现在还有一大拨人在使用dw开发驱动程序,我看网上有本书,叫圈圈教你玩usb,就是采用dw开发驱动的,粉丝还挺多的,证明dw还有一定的生命力,还有一定的市场,所以本文还是会讲到怎样采用dw做驱动开发。

虽然现在正规的商用软件都不采用dw了,因为它的版本不更新,出了bug都没有人维护了。但是用dw做研究还是挺不错的。开场白说完了。开始进入正题,本文的主要安排如下:首先介绍usb通信协议,同时介绍一款最简单的usb芯片,68013。然后接着讲解windows下的usb驱动开发。采用3种不同的方法开发usb驱动程序,最后讲解linux下usb驱动开发,当然两个平台开发usb驱动的异同点是贯穿全文的,不然就跑题了。

作为驱动开发人员,不需要你有多高的算法基础,因为驱动里面的算法都是基本的算法,只要你熟悉原理图,熟悉datesheet,然后学习DDK,WDK下自带的例子,就可以轻松上手,对于linux,同样也是这样,还有linux的源码是公开的,你可以编译,安装,就可以在/usr/src看到各种驱动的源码了,学习这些源码,不但可以提高我们的编程水平,而且使得我们写的驱动更有健壮性。下面我讲解的思路也是这样的,先将usb协议,在讲讲cy7c68013芯片,然后讲解dw,ddk,wdk下的例子,只要将这些例子都学会,可以说,你具有写驱动的水平了,至于要成为高手,就必须多总结经验,多积累经验。

  • 1
  • 2
  • 3
  • 4
  • 5
  • 下一页

相关内容