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