Linux那些事儿 之 戏说USB(6)好戏开始了
生活随笔
收集整理的這篇文章主要介紹了
Linux那些事儿 之 戏说USB(6)好戏开始了
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
新氣象要用新代碼,就使用最新的3.18.2版本的內(nèi)核了。首先要去drivers/usb目錄下走一走看一看。
atm???? chipidea? common? dwc2? early?? host?? Kconfig?? misc? musb? README???????? serial?? usbip?????????? wusbcore
c67x00? class???? core??? dwc3? gadget? image? Makefile? mon?? phy?? renesas_usbhs? storage? usb-skeleton.c
Here is a list of what each subdirectory here is, and what is contained in
them.core/ - This is for the core USB host code, including theusbfs files and the hub class driver ("hub_wq").host/ - This is for USB host controller drivers. Thisincludes UHCI, OHCI, EHCI, and others that mightbe used with more specialized "embedded" systems.gadget/ - This is for USB peripheral controller drivers andthe various gadget drivers which talk to them.Individual USB driver directories. A new driver should be added to the
first subdirectory in the list below that it fits into.image/ - This is for still image drivers, like scanners ordigital cameras.
../input/ - This is for any driver that uses the input subsystem,like keyboard, mice, touchscreens, tablets, etc.
../media/ - This is for multimedia drivers, like video cameras,radios, and any other drivers that talk to the v4lsubsystem.
../net/ - This is for network drivers.
serial/ - This is for USB to serial drivers.
storage/ - This is for USB mass-storage drivers.
class/ - This is for all USB device drivers that do not fitinto any of the above categories, and work for a rangeof USB Class specified devices.
misc/ - This is for all USB device drivers that do not fitinto any of the above categories.
drivers/usb/README文件就描述了相關(guān)的11個文件夾的用途。那么什么是usb core?復(fù)旦人甲說得好。Linux內(nèi)核開發(fā)者們,專門寫了一些代碼, 負責(zé)實現(xiàn)一些核心的功能,為別的設(shè)備驅(qū)動程序提供服務(wù),比如申請內(nèi)存,比如實現(xiàn)一些所有的設(shè)備都會需要的公共的函數(shù),并美其名曰usb core。早期的Linux內(nèi)核,其結(jié)構(gòu)并不是如今天這般有層次感,遠不像今天這般錯落有致,那時候drivers/usb/這個目錄下邊放了很多很多文件,usb core與其他各種設(shè)備的驅(qū)動程序的代碼都堆砌在這里,后來,怎奈世間萬千的變幻,總愛把有情的人分兩端。于是在drivers/usb/目錄下面出來了一個core目錄,就專門放一些核心的代碼,比如初始化整個usb系統(tǒng),初始化root hub,初始化host controller的代碼,再后來甚至把host controller相關(guān)的代碼也單獨建了一個目錄,叫host目錄,這是因為usb host controller隨著時代的發(fā)展,也開始有了好幾種,不再像剛開始那樣只有一種,所以呢,設(shè)計者們把一些host controller公共的代碼仍然留在core目錄下,而一些各host controller單獨的代碼則移到host目錄下面讓負責(zé)各種host controller的人去維護。
那么usb gadget那?gadget白了說就是配件的意思,主要就是一些內(nèi)部運行l(wèi)inux的嵌入式設(shè)備,如PDA,設(shè)備本身有USB設(shè)備控制器(usb device controller),可以將PC,也就是我們的host作為master端,將這樣的設(shè)備作為slave端和PC通過USB進行通信。從host的觀點來看,主機系統(tǒng)的USB驅(qū)動程序控制插入其中的USB設(shè)備,而usb gadget的驅(qū)動程序控制外圍設(shè)備如何作為一個USB設(shè)備和主機通信。比如,我們的嵌入式板子上支持SD卡,如果我們希望在將板子通過USB連接到PC之后,這個SD卡被模擬成U盤,那么就要通過usb gadget架構(gòu)的驅(qū)動。
gadget目錄下大概能夠分為兩個模塊,一個是udc驅(qū)動,這個驅(qū)動是針對具體cpu平臺的,如果找不到現(xiàn)成的,就要自己實現(xiàn)。另外一個就是gadget驅(qū)動,主要有file_storage、ether、serial等。另外還提供了USB gadget API,即USB設(shè)備控制器硬件和gadget驅(qū)動通信的接口。PC及服務(wù)器只有USB主機控制器硬件,它們并不能作為USB gadget存在,而對于嵌入式設(shè)備,USB設(shè)備控制器常被集成到處理器中,設(shè)備的各種功能,如U盤、網(wǎng)卡等,常依賴這種USB設(shè)備控制器來與主機連接,并且設(shè)備的各種功能之間可以切換,比如可以根據(jù)選擇作為U盤或網(wǎng)卡等。
剩下的幾個目錄分門別類的放了各種USB設(shè)備的驅(qū)動,U盤的驅(qū)動在storage目錄下,觸摸屏和USB鍵盤鼠標的驅(qū)動在input目錄下,等等。多說一下的是,Usb 協(xié)議中,除了通用的軟硬件電氣接口規(guī)范等,還包含了各種各樣的Class 協(xié)議,用來為不同的功能定義各自的標準接口和具體的總線上的數(shù)據(jù)交互格式和內(nèi)容。這些Class 協(xié)議的數(shù)量非常多,最常見的比如支持U 盤功能的Mass Storage Class,以及通用的數(shù)據(jù)交換協(xié)議:CDC class。此外還包括Audio Class, Print Class 等等。理論上說,即使沒有這些Class,通過專用驅(qū)動也能夠?qū)崿F(xiàn)各種各樣的應(yīng)用功能。但是,正如Mass StorageClass 的使用,使得各個廠商生產(chǎn)的U盤都能通過操作系統(tǒng)自帶的統(tǒng)一的驅(qū)動程序來使用,對U盤的普及使用起了極大的推動作用,制定其它這些Class 也是為了同樣的目的。
我們響應(yīng)了README的呼喚,它便給予了我們想要的,通過它我們了解了usb目錄里的那些文件夾都有著什么樣的角色。到現(xiàn)在為止,就只剩下Kconfig、Makefile兩個文件了,它們又扮演著什么樣的角色那?就好像我吃東西總是喜歡把好吃的留在最后享受一樣,我也習(xí)慣于將重要的留在最后去描述。對于一個希望能夠在Linux內(nèi)核的汪洋代碼里看到一絲曙光的人來說,將它們放在怎么重要的地位都不過分。我們?nèi)ハ愀?#xff0c;通過海關(guān)的時候,總會有免費的地圖啊各種指南拿,有了它們在手里我們才不至于無頭蒼蠅般迷惘的行走在陌生的街道上。出去旅游的時候一般來說也總是會首先找份地圖,當(dāng)然了,這時就是要去買了,拿是拿不到的,不同的地方有不同的特色,不是么,別人的特色是服務(wù),咱們的特色是花錢,有的地方特色是一塊石頭,那這塊石頭收你70也不能嫌貴,有的山上特色是那些多少年的洋房子,那就從進山收起吧,一個一個房子的來,口號就是不能讓一分錢下山。Kconfig、Makefile就是linux kernel迷宮里的地圖,我們每次瀏覽kernel尋找屬于自己的那一段代碼時,都應(yīng)該首先看看目錄下的這兩個文件。
不過,這里很明顯,要想了解USB協(xié)議在內(nèi)核里的實現(xiàn),usb core就是我們需要關(guān)注的對象,就不表Kconfig、Makefile文件的內(nèi)容了。
總結(jié)
以上是生活随笔為你收集整理的Linux那些事儿 之 戏说USB(6)好戏开始了的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux那些事儿 之 戏说USB(5)
- 下一篇: Linux那些事儿 之 戏说USB(7)