Linux那些事儿 之 戏说USB(4)最终奥义
生活随笔
收集整理的這篇文章主要介紹了
Linux那些事儿 之 戏说USB(4)最终奥义
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一個完整的USB系統應該實現上面圖里的各個部分,圖里主要顯示了四個層次,USB物理設備(USB Physical Device)、客戶軟件(Client SW)、USB系統軟件(USB System SW)以及USB Host Controller。Host Controller已經說過了,系統軟件就是操作系統里用來支持USB的部分,像咱們的usb core,還有各種設備驅動等等,客戶軟件么,就是上層應用了,只有設備和驅動程序,我們仍然什么都做不了,現實生活中一個很淺顯的道理就是只靠攝像頭和驅動是不可能和mm視頻的。
真的是這樣么?多少年以前,作為一個普通人,我會堅定的說是。只是現在,作為一個讀了協議的普通人,我要說并不完全是這樣。上面的系統軟件,只表示了系統里支持USB的部分,也就是系統相關設備無關的部分,相對于咱們的linux來說,就是usb core,并不包括所謂的各種設備驅動。而客戶軟件則指設備相關,也就是對應于特定設備的部分,你的USB鍵盤驅動、觸摸屏驅動什么的都在這兒。這里的名字太迷惑人了,一直覺得寫驅動是系統級的編程,原來搞協議的這些同志覺得不是這么回事,我羞愧的低下了無知的腦袋。
為什么會對這幾個概念這么較真兒那,不是因為它們有多可愛,只是它們在協議里無處不在。主機這邊就分這三層,Host Controller看似在最低層,卻掌控著整個USB的通信,你的USB設備要想發揮作用,首先得獲得它的批準。
USB物理設備這邊看著好像也分了三層,其實我們可以把它們看成一樣的東東,只是為了對應了主機這邊的不同層次,Host Controller看到的是一個個hub還有hub上的USB device,而在系統軟件的眼里沒那么多道道兒,hub還有各種設備什么的都是一個個的邏輯設備,客戶軟件看到的是設備提供的功能。接下來還會有說到。站在不同的高度看到不同的風景,不然為什么買房子時高一層要加多少錢那。
已經被計算機網絡中的七層協議洗過腦的我們應該很容易的就看出,真實的數據流只發生在Host Controller和設備的Bus Interface之間,其它的都是邏輯上的,也就說是虛的。
各種USB設備提供的功能是不同的,但是面向主機的Bus Interface卻是一致的,主機也不是神仙,掐指一算就可以知道哪個是哪個,所以,那些設備本身還必須要提供用來確認自己身份的信息,這些信息里有些是共有的,有些是個別設備特有的。
各種設備和主機是怎么連接在一起的那?前面的那顆樹已經描繪的比較形象了,不過那棵樹里的compound device被有意的飄過了。那么,compound 設備又是什么樣的設備?其實,在USB的世界里,不僅僅有compound device,還有composite device,簡單的中文名字已經無法形象的表達它們的區別,就還是使用它們的英文原名了。compound device是那些將hub和連在hub上的設備封裝在一起所組成的設備,而composite device是包含彼此獨立的多個接口的設備。從主機的角度看,一個compound device和單獨的一個hub然后連接了多個USB設備是一樣的,它里面包含的hub和各個設備都會有自己獨立的地址,而一個composite device里不管具有多少接口,它都只有一個地址。
上面都是站在host controller的層次上,說的是實實在在的物理拓撲,對于系統軟件來說,沒有這么復雜,所有的hub和設備都是一個個的邏輯設備。站的越高,看的越遠,快樂如此簡單。
一個USB邏輯設備就是一系列端點(endpoint)的集合,它與主機之間的通信發生在主機上的一個緩沖區和設備上的一個端點之間,通過管道來傳輸數據。意思就是管道的一端是主機上的一個緩沖區,一端是設備上的端點。
圖里的Interface是怎么回事?這里先簡單說說吧,反正代碼里會不停的遇到再遇到。USB端點被捆綁為接口(Interface),一個接口代表一個基本功能。有的設備具有多個接口,像USB揚聲器就包括一個鍵盤接口和一個音頻流接口。在內核里一個接口要對應一個驅動程序,USB揚聲器在linux里就需要兩個不同的驅動程序。到目前為止,可以這么說,一個設備可以包括多個接口,一個接口可以沒有或具有一個以上的端點,當然以后我們會發現并不僅僅止于此。不過先說這么多吧,省得說得慷慨激昂,看的昏昏欲睡。
現在已經說了USB的歷史發展體系結構等比較基本的東東,也就是協議的前幾章,更多的東東還是下面和代碼一塊說吧。為了紀念這個歷史性的時刻,學學電影里的酷哥警察說句:好戲開始了。
總結
以上是生活随笔為你收集整理的Linux那些事儿 之 戏说USB(4)最终奥义的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux那些事儿 之 戏说USB(3)
- 下一篇: Linux那些事儿 之 戏说USB(5)