Linux裝置驅動程式學習(16)-USB 驅動程式(一)

來源:互聯網
上載者:User

從此文檔開始,核心使用2.6.29.4

很久沒有寫《LDD3》的學習筆記了,趁著做項目的機會,學習一下USB的驅動程式,並寫學習筆記。

如果剛開始接觸USB,會感覺無從下手,這種感覺就像我第一次接觸嵌入式Linux一樣。所以要對USB的硬體原理、資料轉送和在USB電纜上傳輸的資料格式有一定的瞭解。所以推薦一篇《實用USB術語詳解》。再去CEPARK ( China Electronics Park ) 電子園看完上面的經典教程和基礎知識。看了上面的文章,您會對USB有一定的認識(如果你再寫一個簡單的在51上的USB韌體就更好了),在學習USB的Linux驅動您就會覺得很輕鬆了。
如果您想要更細的知識,你可以去老古開發網下一本《USB結構體系》,有需要的時候翻一下。您也可以買專門介紹USB的書籍。
拓撲結構上, 一個 USB 子系統並不是以匯流排的方式來分布; 它是一棵由幾個點對點連接構成的樹。這些串連是串連裝置和集線器的4線電纜(地, 電源, 和 2 個差分訊號線), 如同乙太網路的雙絞線。USB主控制器負責詢問每個USB裝置是否有資料需要發送。
由於這個拓撲結構,一個 USB 裝置在沒有主控制器要求的情況下不能發送資料. 也就是說:USB是單主方式的實現,主機輪詢各外設。但是裝置也可以要求一個固定的資料傳輸頻寬,以保證可靠的音視頻I/O。USB只作為資料轉送通道,對他所收發的資料格式沒有特殊的內容和結構上的要求,也就是類似於透傳。
Linux核心支援兩種主要類型的USB驅動程式:Host系統上的驅動程式(USB device driver)和device上的驅動程式(USB gadget driver)(裝置端驅動)。
USB驅動程式存在於不同的核心子系統和USB硬體控制器之中。USB核心為USB驅動程式提供了一個用於訪問和控制USB硬體的介面,它隱藏了USB控制器的硬體細節。從這裡我們要知道:《LDD3》所謂的USB驅動是針對USB核心提供的介面而寫的,並不是真正去操縱USB硬體控制器中的寄存器。這樣你必須保證你的板子上CPU的USB硬體控制器的驅動是可用的。否則您就得先搞定CPU的USB硬體控制器的驅動才行。
以下是Linux核心中USB驅動的軟體構架:

    如左所示,從主機側的觀念去看,在Linux驅動中,USB驅動處於最底層的是USB主機控制器硬體,在其之上啟動並執行是USB主機控制器驅動,主機控制器之上為USB核心層,再上層為USB裝置驅動層(插入主機上的隨身碟、滑鼠、USB轉串口等裝置驅動)。因此,在主機側的階層中,要實現的USB驅動包括兩類:USB主機控制器驅動和USB裝置驅動,前者控制插入其中的USB裝置,後者控制USB裝置如何與主機通訊。Linux核心USB核心負責USB驅動管理和協議處理的主要工作。主機控制器驅動和裝置驅動之間的USB核心非常重要,其功能包括:通過定義一些資料結構、宏和功能函數,向上為裝置驅動提供編程介面,向下為USB主機控制器驅動提供編程介面;通過全域變數維護整個系統的USB裝置資訊;完成裝置熱插拔控制、匯流排資料轉送控制等。

    如右所示,Linux核心中USB裝置側驅動程式分為3個層次:UDC驅動程式、Gadget API和Gadget驅動程式。UDC驅動程式直接存取硬體,控制USB裝置和主機間的底層通訊,向上層提供與硬體相關操作的回呼函數。當前Gadget API是UDC驅動程式回呼函數的簡單封裝。Gadget驅動程式具體控制USB裝置功能的實現,使裝置表現出“網路連接”、“印表機”或“USB Mass Storage”等特性,它使用Gadget API控制UDC實現上述功能。Gadget API把下層的UDC驅動程式和上層的Gadget驅動程式隔離開,使得在Linux系統中編寫USB裝置側驅動程式時能夠把功能的實現和底層通訊分離。

以上的圖和文字載自 華清遠見的《Linux裝置驅動開發詳解》

《LDD3》中的USB驅動的介紹分以下幾塊:
-----------基礎知識部分--------------
(1)USB裝置基礎
        端點
        介面
        配置
(2)USB和sysfs
(3)USB urb
        struct urb
        建立和銷毀urb
           中斷urb
           批量urb
           控制urb
           等時urb
        提交urb
        結束urb:結束回調處理常式
        取消urb
-------------------------------
--------驅動編寫部分(一)--------------
(4)編寫USB驅動程式
        驅動支援什麼裝置
        註冊USB驅動程式
        探測和斷開的細節
        提交和控制urb
-------------------------------
--------驅動編寫部分(二)--------------
(5)不使用urb的USB傳輸
        usb_bulk_msg
        usb_control_msg
(6)其他USB資料函數
-------------------------------
我這份筆記也基本按照這個順序來寫。之後會添加USB gadget的驅動知識。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.