歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 詳細解析Windows usb驅動和Linux usb驅動的相似和差異

詳細解析Windows usb驅動和Linux usb驅動的相似和差異

日期:2017/2/28 16:19:36   编辑:Linux教程

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下的例子,只要將這些例子都學會,可以說,你具有寫驅動的水平了,至於要成為高手,就必須多總結經驗,多積累經驗。

Copyright © Linux教程網 All Rights Reserved