久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Linux設(shè)備驅(qū)動程序?qū)W習(xí)(16)-USB 驅(qū)動程序(一)

 lchjczw 2012-03-19
Linux設(shè)備驅(qū)動程序?qū)W習(xí)(16)-USB 驅(qū)動程序(一)
從此文檔開始,,內(nèi)核使用2.6.29.4

很久沒有寫《LDD3》的學(xué)習(xí)筆記了,,趁著做項目的機會,學(xué)習(xí)一下USB的驅(qū)動程序,,并寫學(xué)習(xí)筆記,。

如果剛開始接觸USB,,會感覺無從下手,,這種感覺就像我第一次接觸嵌入式Linux一樣。所以要對USB的硬件原理,、數(shù)據(jù)傳輸和在USB電纜上傳輸?shù)臄?shù)據(jù)格式有一定的了解,。所以推薦一篇
《實用USB術(shù)語詳解》
。再去
CEPARK ( China Electronics Park ) 電子園
看完上面的
經(jīng)典教程

基礎(chǔ)知識
,??戳松厦娴奈恼拢鷷SB有一定的認識(如果你再寫一個簡單的在51上的USB固件就更好了),,在學(xué)習(xí)USB的Linux驅(qū)動您就會覺得很輕松了,。
如果您想要更細的知識,你可以去老古開發(fā)網(wǎng)下一本
《USB結(jié)構(gòu)體系》
,,有需要的時候翻一下,。您也可以買專門介紹USB的書籍。
拓撲結(jié)構(gòu)上, 一個 USB 子系統(tǒng)并不是以總線的方式來分布; 它是一棵由幾個點對點連接構(gòu)成的樹,。這些連接是連接設(shè)備和集線器的4線電纜(地, 電源, 和 2 個差分信號線), 如同以太網(wǎng)的雙絞線,。USB主控制器負責詢問每個USB設(shè)備是否有數(shù)據(jù)需要發(fā)送。

于這個拓撲結(jié)構(gòu),,一個 USB 設(shè)備在沒有主控制器要求的情況下不能發(fā)送數(shù)據(jù).
也就是說:USB是單主方式的實現(xiàn),,主機輪詢各外設(shè),。但是設(shè)備也可以要求一個固定的數(shù)據(jù)傳輸帶寬,以保證可靠的音視頻I/O,。USB只作為數(shù)據(jù)傳輸通道,,
對他所收發(fā)的數(shù)據(jù)格式?jīng)]有特殊的內(nèi)容和結(jié)構(gòu)上的要求,也就是類似于透傳,。
Linux內(nèi)核支持兩種主要類型的USB驅(qū)動程序:Host系統(tǒng)上的驅(qū)動程序(USB device driver)和device上的驅(qū)動程序(USB gadget driver)(設(shè)備端驅(qū)動),。
USB驅(qū)動程序存在于不同的內(nèi)核子系統(tǒng)和USB硬件控制器之中。USB核心為USB驅(qū)動程序提供了一個用于訪問和控制USB硬件的接口,,它隱藏了USB控制器的硬件細節(jié),。從這里我們要知道:《LDD3》所謂的USB驅(qū)動是針對USB核心提供的接口而寫的,并不是真正去操縱USB硬件控制器中的寄存器,。這樣你必須保證你的板子上CPU的USB硬件控制器的驅(qū)動是可用的,。否則您就得先搞定CPU的USB硬件控制器的驅(qū)動才行。
以下是Linux內(nèi)核中USB驅(qū)動的軟件構(gòu)架:
    如左下圖所示,,從主機側(cè)的觀念去看,,在Linux驅(qū)動中,USB驅(qū)動處于最底層的是USB主機控制器硬件,,在其之上運行的是USB主機控制器驅(qū)動,,主機控制器之上為USB核心層,再上層為USB設(shè)備驅(qū)動層(插入主機上的U盤,、鼠標,、USB轉(zhuǎn)串口等設(shè)備驅(qū)動)。因此,,在主機側(cè)的層次結(jié)構(gòu)中,,要實現(xiàn)的USB驅(qū)動包括兩類:USB主機控制器驅(qū)動和USB設(shè)備驅(qū)動,前者控制插入其中的USB設(shè)備,,后者控制USB設(shè)備如何與主機通信,。Linux內(nèi)核USB核心負責USB驅(qū)動管理和協(xié)議處理的主要工作。主機控制器驅(qū)動和設(shè)備驅(qū)動之間的USB核心非常重要,,其功能包括:通過定義一些數(shù)據(jù)結(jié)構(gòu),、宏和功能函數(shù),向上為設(shè)備驅(qū)動提供編程接口,,向下為USB主機控制器驅(qū)動提供編程接口;通過全局變量維護整個系統(tǒng)的USB設(shè)備信息,;完成設(shè)備熱插拔控制,、總線數(shù)據(jù)傳輸控制等。
    如右下圖所示,Linux內(nèi)核中USB設(shè)備側(cè)驅(qū)動程序分為3個層次:UDC驅(qū)動程序,、Gadget API和Gadget驅(qū)動程序。UDC驅(qū)動程序直接訪問硬件,,控制USB設(shè)備和主機間的底層通信,,向上層提供與硬件相關(guān)操作的回調(diào)函數(shù),。當前Gadget API是UDC驅(qū)動程序回調(diào)函數(shù)的簡單包裝。Gadget驅(qū)動程序具體控制USB設(shè)備功能的實現(xiàn),,使設(shè)備表現(xiàn)出“網(wǎng)絡(luò)連接”、“打印機”或“USB Mass Storage”等特性,,它使用Gadget API控制UDC實現(xiàn)上述功能,。Gadget API把下層的UDC驅(qū)動程序和上層的Gadget驅(qū)動程序隔離開,使得在Linux系統(tǒng)中編寫USB設(shè)備側(cè)驅(qū)動程序時能夠把功能的實現(xiàn)和底層通信分離,。

以上的圖和文字載自 華清遠見的《
Linux設(shè)備驅(qū)動開發(fā)詳解

《LDD3》中的USB驅(qū)動的介紹分以下幾塊:
-----------基礎(chǔ)知識部分--------------
(1)USB設(shè)備基礎(chǔ)
        端點
        接口
        配置
(2)USB和sysfs
(3)USB urb
        struct urb
        創(chuàng)建和銷毀urb
           中斷urb
           批量urb
           控制urb
           等時urb
        提交urb
        結(jié)束urb:結(jié)束回調(diào)處理例程
        取消urb
-------------------------------
--------驅(qū)動編寫部分(一)--------------
(4)編寫USB驅(qū)動程序
        驅(qū)動支持什么設(shè)備
        注冊USB驅(qū)動程序
        探測和斷開的細節(jié)
        提交和控制urb
-------------------------------
--------驅(qū)動編寫部分(二)--------------
(5)不使用urb的USB傳輸
        usb_bulk_msg
        usb_control_msg
(6)其他USB數(shù)據(jù)函數(shù)
-------------------------------
我這份筆記也基本按照這個順序來寫。之后會添加USB gadget的驅(qū)動知識

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多