現在的位置: 首頁 > 綜合 > 正文

嵌入式linux下usb驅動開發方法–看完少走彎路

2014年10月30日 ⁄ 綜合 ⁄ 共 1215字 ⁄ 字型大小 評論關閉

 

嵌入式linux下的usb屬於所有驅動中相當複雜的一個子系統,要想將她徹底征服,至少需要個把月的時間,不信?那是你沒做過。

本 人做過2年的嵌入式驅動開發,usb佔了一大半的時間。期間走了不少彎路,下面將我的血的經驗教訓總結下,為要從事和正在從事的戰友們做一點點貢獻吧:)

首 先,掃盲;

要做的是閱讀usb Spec(英文的哦,其實很多文章、書籍和資料真有水平的還是原創的好,就像食品往往經過加工就變了味,之前如果沒有接觸過的話可以先看看中文的,大概先 有個印象),這個工作其實是很複雜很枯燥的一部分。看Spec的同時可以到網上大概瀏覽下usb開發的相關知識,這個階段就是掃盲,不求精進。至少你得知 道usb的四種傳輸類型吧,你得知道usb從上電開始的幾個狀態吧,你得知道usb設備都有哪些吧,等等。

第二步,窺全貌;

usb 設備是如何工作起來的?其實usb子系統是分層次工作的,他們配合默契,做好自己的份內之事,一切以大局為重。usb驅動可以分為usb設備驅動,usb 控制器驅動,hub驅動,匯流排驅動等等。我建議你還是順著設備驅動的這根主線往下走吧。

在真正開始分析usb驅動代碼這之前,你需要了解 linux模塊機制,linux驅動的platform匯流排構架,之類。一個模塊被載入後,從driver的角度來說,真正將設備驅動起來是從probe 開始的。這個你該知道。你得知道為什麼usb可以即插即用,做軟體的朋友該知道線程這個東西吧,和她有關係的。usb系統裡面一個最重要的角色該出場 了,urb。一切的一切都要圍繞她進行。pipe為她鋪路,數據由她承載。usb設備驅動的工作就是準備好這個urb後她的使命就基本完成了,那她把 urb給了誰?這就是之前提到的usb控制器驅動,host。

至於host,現在市場上有很多款,如果你老闆給你用的是市面上用的最成熟的 像EHCI,那麼你太幸運了。這個基本不用你寫,只要稍加修改,把她註冊到匯流排上即可。如果你很不幸,使用了像musb這樣的host,你慘了,有你苦頭 吃了。呵呵。如果有用的可以聯繫我,之前研究過,興許可以幫上什麼忙啊。

第三步,精益求精;

這個時候驅動你也調過了,也許這 時候已經跑起來了,也許還沒跑起來。可能你開始浮躁了,到這個時候咋的也過去個把月了,如果還沒出成果難免心急。好,這時候如果是這樣,你該做什麼 呢?    重新看Spec,重新看整個驅動過程,重複之前做過的事情。這次你再看絕對和之前不一樣了。這時候你要學會的是,堅持,耐 力.................

最後,給大家介紹一下我自認為不錯的資料,你可以參考。像復旦一哥們寫的linux那點事兒(附件里 有,大家嫌麻煩可以到我這裡下載Linux那些
事兒之我是U盤.pdf
 
),ldd3,最好的資料是源代碼。

需要資料的朋友可以給回復留言,我可以發給大家,我庫里一堆資 料,我喜歡看電子版的,所以如果你也和我一樣喜歡看電子書籍的話,我很樂於奉獻的哦~~

抱歉!評論已關閉.