详细解析windows usb驱动和linux usb驱动的相似和差异(一)
来源:互联网 发布:js 空格替换成换行符 编辑:程序博客网 时间:2024/04/30 10:17
版权信息:
版权归smilestone322所有,保留所有权利,仅用来学习,请勿用于商业用途,欢迎转载,转载请注明出处。谢谢!连载ing。
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驱动程序之前我没有做过驱动的经验,甚至都不知道,驱动是干嘛的。但是临危受命,只有往前冲,没有回头路,那就往前走呗。
没有文档,没有原理图,甚至连数据手册都没有给我,就跟我讲了讲这个项目要做什么工作。当时一片茫然,真希望神仙来指路。拿到项目需求,其实是口头上的,呵呵,没有一行字的文档。没有办法,一边学习,一边做需求分析,请教做过这些事情的同事和同学。到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下的例子,只要将这些例子都学会,可以说,你具有写驱动的水平了,至于要成为高手,就必须多总结经验,多积累经验。
连载,未完待续。。。。。
- 详细解析windows usb驱动和linux usb驱动的相似和差异(一)
- 详细解析windows usb驱动和linux usb驱动的相似和差异(二)
- 详细解析windows usb驱动和linux usb驱动的相似和差异(三)
- 详细解析windows usb驱动和linux usb驱动的相似和差异(四)
- 详细解析windows usb驱动和linux usb驱动的相似和差异(五)
- 详细解析windows usb驱动和linux usb驱动的相似和差异(六)
- 详细解析windows usb驱动和linux usb驱动的相似和差异(七)
- 详细解析windows usb驱动和linux usb驱动的相似和差异(八)
- 详细解析windows usb驱动和linux usb驱动的相似和差异(九)
- 详细解析windows usb驱动和linux usb驱动的相似和差异(十)
- 详细解析windows usb驱动和linux usb驱动的相似和差异(五)
- USB 驱动和配件
- 浅析linux下usb鼠标和usb键盘usbhid驱动hid_parse_report报告描述符解析
- Linux下的USB总线驱动(一) USB驱动框架usb-skeleton.c分析
- Linux下的USB总线驱动(一) USB驱动框架usb-skeleton.c分析
- USB和video for linux驱动
- linux usb 驱动详解 一
- linux usb 驱动详解 一
- 博客迁移
- 送给十二星座的名言警句
- weibolan
- Jquery对数组提供的两个函数$.map(arr,fn)和$.each(arr,fn)
- 浅谈linux多线程编程和windows多线程编程的异同
- 详细解析windows usb驱动和linux usb驱动的相似和差异(一)
- get与post
- 读写cookie
- OSNEWS中文版重点推荐:业余操作系统开发第一部分:你准备好了吗?
- 转 linux 启动过程
- java dom4j操作xml[转]
- Calling API functions using C#
- [Java]读取文件方法大全
- samba自启动