| 您所在的位置:讀書頻道 > 操作系統(tǒng) > Linux > 25.2.1 Linux內(nèi)核USB驅(qū)動框架 25.2.1 Linux內(nèi)核USB驅(qū)動框架《ARM嵌入式Linux系統(tǒng)開發(fā)詳解》第25章USB驅(qū)動開發(fā),本章講解了Linux內(nèi)核USB驅(qū)動體系結(jié)構(gòu)、USB設(shè)備驅(qū)動結(jié)構(gòu)等知識,并在最后給出了兩個USB設(shè)備驅(qū)動開發(fā)實(shí)例。本節(jié)為大家介紹Linux內(nèi)核USB驅(qū)動框架。 AD: 25.2 USB驅(qū)動程序框架 Linux內(nèi)核提供了完整的USB驅(qū)動程序框架。USB總線采用樹形結(jié)構(gòu),在一條總線上只能有唯一的主機(jī)設(shè)備。Linux內(nèi)核從主機(jī)和設(shè)備兩個角度觀察USB總線結(jié)構(gòu)。本節(jié)介紹Linux內(nèi)核USB驅(qū)動程序框架。 25.2.1 Linux內(nèi)核USB驅(qū)動框架 圖25-2是Linux內(nèi)核從主機(jī)和設(shè)備兩個角度觀察USB總線結(jié)構(gòu)的示意圖。 從圖25-2中可以看出,Linux內(nèi)核USB驅(qū)動是按照主機(jī)驅(qū)動和設(shè)備驅(qū)動兩套體系實(shí)現(xiàn)的,下面介紹兩套體系的結(jié)構(gòu)和特點(diǎn)。 1.基本結(jié)構(gòu) 圖25-2的左側(cè)是主機(jī)驅(qū)動結(jié)構(gòu)。主機(jī)驅(qū)動的最底層是USB主機(jī)控制器,提供了OHCI/EHCI/UHCI這3種類型的總線控制功能。在USB控 制器的上一層是主機(jī)控制器的驅(qū)動,分別對應(yīng)OHCI/EHCI/UHCI這3種類型的總線接口。USB核心部分連接了USB控制器驅(qū)動和設(shè)備驅(qū)動,是兩者 之間的轉(zhuǎn)換接口。USB設(shè)備驅(qū)動層提供了各種設(shè)備的驅(qū)動程序。 USB主機(jī)部分的設(shè)計結(jié)構(gòu)完全是從USB總線特點(diǎn)出發(fā)的。在USB總線上可以連接各種不同類型的設(shè)備,包括字符設(shè)備、塊設(shè)備和網(wǎng)絡(luò)設(shè)備。所有類型的 USB設(shè)備都是用相同的電氣接口,使用的傳輸協(xié)議也基本相同。向用戶提供某種特定類型的USB設(shè)備時,需要處理USB總線協(xié)議。內(nèi)核完成所有的USB總線 協(xié)議處理,并且向用戶提供編程接口。 
 圖25-2右側(cè)是設(shè)備驅(qū)動結(jié)構(gòu)。與USB主機(jī)類似,USB設(shè)備提供了相同的層次結(jié)構(gòu)與之對應(yīng)。但是在USB設(shè)備一側(cè)使用名為Gadget API的結(jié)構(gòu)作為核心。Gadget API是Linux內(nèi)核實(shí)現(xiàn)的對應(yīng)USB設(shè)備的核心結(jié)構(gòu)。Gadget API屏蔽了USB設(shè)備控制器的細(xì)節(jié),控制具體的USB設(shè)備實(shí)現(xiàn)。 2.設(shè)備 每個USB設(shè)備提供了不同級別的配置信息。一個USB設(shè)備可以包含一個或多個配置,不同的配置使設(shè)備表現(xiàn)出不同的特點(diǎn)。其中,設(shè)備的配置是通過接口組成的。Linux內(nèi)核定義了USB設(shè)備描述結(jié)構(gòu)如下: 
 從usb_device_descriptor結(jié)構(gòu)定義看出,一個設(shè)備描述符定義了與USB設(shè)備有關(guān)的所有信息。 3.接口 在USB體系中,接口是由多個端點(diǎn)組成的。一個接口代表一個基本的功能,是USB設(shè)備驅(qū)動程序控制的對象。一個USB設(shè)備最少有一個接口,功能復(fù)雜的USB設(shè)備可以有多個接口。接口描述定義如下: 
 4.端點(diǎn) 端點(diǎn)是USB總線通信的基本形式,每個USB設(shè)備接口可以認(rèn)為是端點(diǎn)的集合。主機(jī)只能通過端點(diǎn)與設(shè)備通信。USB體系結(jié)構(gòu)規(guī)定每個端點(diǎn)都有一個唯一 的地址,由設(shè)備地址和端點(diǎn)號決定端點(diǎn)地址。端點(diǎn)還包括了與主機(jī)通信用到的屬性,如傳輸方式、總線訪問頻率、帶寬和端點(diǎn)號等。端點(diǎn)的通信是單向的,通過端點(diǎn) 傳輸?shù)臄?shù)據(jù)只能是從主機(jī)到設(shè)備或者從設(shè)備到主機(jī)。端點(diǎn)定義描述如下: 
 5.配置 配置是一個接口的集合。Linux內(nèi)核配置的定義如下: 
 配置描述符結(jié)構(gòu)定義了配置的基本屬性和接口數(shù)量等信息。 【責(zé)任編輯:云霞 TEL:(010)68476606】 
 | 
|  |