![協(xié)議一節(jié)驅(qū)動(dòng)詳解_第1頁(yè)](http://file4.renrendoc.com/view11/M02/31/26/wKhkGWWhrIKAQzfGAAC3rhFuUqs150.jpg)
![協(xié)議一節(jié)驅(qū)動(dòng)詳解_第2頁(yè)](http://file4.renrendoc.com/view11/M02/31/26/wKhkGWWhrIKAQzfGAAC3rhFuUqs1502.jpg)
![協(xié)議一節(jié)驅(qū)動(dòng)詳解_第3頁(yè)](http://file4.renrendoc.com/view11/M02/31/26/wKhkGWWhrIKAQzfGAAC3rhFuUqs1503.jpg)
![協(xié)議一節(jié)驅(qū)動(dòng)詳解_第4頁(yè)](http://file4.renrendoc.com/view11/M02/31/26/wKhkGWWhrIKAQzfGAAC3rhFuUqs1504.jpg)
![協(xié)議一節(jié)驅(qū)動(dòng)詳解_第5頁(yè)](http://file4.renrendoc.com/view11/M02/31/26/wKhkGWWhrIKAQzfGAAC3rhFuUqs1505.jpg)
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
嵌入式電子工程師2第四章USB驅(qū)動(dòng)34.1USB驅(qū)動(dòng)層次結(jié)構(gòu)4課程目的了解USB驅(qū)動(dòng)發(fā)展概況掌握USB驅(qū)動(dòng)編譯掌握USB驅(qū)動(dòng)架構(gòu)掌握USB驅(qū)動(dòng)結(jié)構(gòu)體5課程內(nèi)容
USB驅(qū)動(dòng)發(fā)展概況USB驅(qū)動(dòng)編譯USB驅(qū)動(dòng)架構(gòu)USB驅(qū)動(dòng)結(jié)構(gòu)體64.1.1
USB驅(qū)動(dòng)編譯7USB驅(qū)動(dòng)編譯在講解USB驅(qū)動(dòng)之前我們先感性認(rèn)識(shí)USB驅(qū)動(dòng),首先我們編譯并安裝USB驅(qū)動(dòng)進(jìn)入linux源碼目錄運(yùn)行命令makemenuconfig8USB驅(qū)動(dòng)編譯9USB驅(qū)動(dòng)編譯10USB驅(qū)動(dòng)編譯11USB驅(qū)動(dòng)編譯12USB驅(qū)動(dòng)編譯13USB驅(qū)動(dòng)編譯如果第一次編譯內(nèi)核,需要先執(zhí)行命令:makedep然后編譯內(nèi)核,執(zhí)行命令:makebzImage編譯模塊,執(zhí)行命令:makemodules14USB驅(qū)動(dòng)編譯打開(kāi)串口,進(jìn)入vivi,將內(nèi)核燒錄到實(shí)驗(yàn)箱上vivi〉loadflashkernelx燒錄完成后,啟動(dòng)內(nèi)核,掛載NFS服務(wù)器拷貝linux源碼目錄中的drivers/usb/storage/usb-storage.o到開(kāi)發(fā)板上15USB驅(qū)動(dòng)編譯插入U(xiǎn)盤(pán)觀察串口輸出插入U(xiǎn)SB大容量存儲(chǔ)驅(qū)動(dòng),使用命令:insmodusb-storage.olsmod察看再次插入U(xiǎn)盤(pán),觀察串口輸出使用命令mount/dev/scsi/host0/bus0/target0/lun0/part1/usr或者mount/dev/scsi/host0/bus0/target0/lun0/disc/usr16USB驅(qū)動(dòng)編譯察看U盤(pán)內(nèi)容,執(zhí)行命令:ls/usr174.1.2
什么是USB接口18一、USB接口定義
USB是英文“Universal
Serial
Bus”的縮寫(xiě),意為“通用串行總線”。是由Compaq(康柏)、DEC、IBM、Intel、NEC、微軟以及Northern
(北方電訊)等公司于1994年11月共同提出的,主要目的就是為了解決接口標(biāo)準(zhǔn)太多的弊端USB使用一個(gè)4針插頭作為標(biāo)準(zhǔn)插頭,并通過(guò)這個(gè)標(biāo)準(zhǔn)接頭,采用菊花瓣形式把所有外設(shè)連接起來(lái),它采用串行方式傳輸數(shù)據(jù),目前最大數(shù)據(jù)傳輸率為12Mbps,
支持多數(shù)據(jù)流和多個(gè)設(shè)備并行操作,允許外設(shè)熱插拔19目前USB接口雖然只發(fā)展了2代(USB1.0/1.1,USB2.0),但是USB綜合了一個(gè)多平臺(tái)標(biāo)準(zhǔn)的所有優(yōu)點(diǎn)
--
包括降低成本,增加兼容性,可連接大量的外部設(shè)備,融合先進(jìn)的功能和品質(zhì)。使其逐步成為PC接口標(biāo)準(zhǔn),進(jìn)入了高速發(fā)展期。
204.1.3
USB拓?fù)浣Y(jié)構(gòu)21USB拓?fù)浣Y(jié)構(gòu)一個(gè)USB系統(tǒng)由一個(gè)USB主機(jī)、一個(gè)或多個(gè)USB集線器和一個(gè)或多個(gè)USB設(shè)備節(jié)點(diǎn)組成。在USB總線上,USB會(huì)為每個(gè)連接在USB設(shè)備分配一個(gè)地址,USB主機(jī)通過(guò)設(shè)備地址訪問(wèn)相關(guān)的設(shè)備USB總線連接了USB設(shè)備和USB主機(jī),USB的物理連接是由層次性的星型結(jié)構(gòu)集線器能夠增加外設(shè)的端口數(shù)22USB拓?fù)浣Y(jié)構(gòu)在任何USB系統(tǒng)中僅有一臺(tái)主機(jī)(Host)。主機(jī)系統(tǒng)中的USB接口稱(chēng)為主機(jī)控制器USB主機(jī)通過(guò)主機(jī)控制器與USB設(shè)備進(jìn)行交互。USB主機(jī)負(fù)責(zé)的任務(wù)包括:檢測(cè)USB設(shè)備的連接和拆除管理主機(jī)和USB設(shè)備之間的控制流管理主機(jī)和USB設(shè)備之間的數(shù)據(jù)流收集狀態(tài)和活動(dòng)的統(tǒng)計(jì)為連接的USB設(shè)備提供電源23USB拓?fù)浣Y(jié)構(gòu)244.1.4USB驅(qū)動(dòng)層次25USB驅(qū)動(dòng)層次Linux中的USB驅(qū)動(dòng)分為兩部分,一部分為設(shè)備端驅(qū)動(dòng),一部分為控制器端驅(qū)動(dòng)。之所以USB驅(qū)動(dòng)需要分為設(shè)備端和主控制端是因?yàn)閁SB本身分為USB從設(shè)備和USB主設(shè)備。USB設(shè)備端驅(qū)動(dòng)主要用于linux運(yùn)行在USB設(shè)備中,比如運(yùn)行l(wèi)inux的手機(jī)大多數(shù)可以作為U盤(pán)連接到電腦交換數(shù)據(jù)。USB主控制端驅(qū)動(dòng)用于連接USB設(shè)備的的主機(jī)中,比如安裝了linux的電腦。26USB驅(qū)動(dòng)層次27USB驅(qū)動(dòng)層次對(duì)于USB設(shè)備端驅(qū)動(dòng)一般都固化在USB設(shè)備中,有制造USB設(shè)備的廠家提供。我們這里主要探討USB主控制器端的驅(qū)動(dòng)。28USB驅(qū)動(dòng)層次29USB驅(qū)動(dòng)層次HostControlDriver位于USB主控制器端驅(qū)動(dòng)的最底層,它對(duì)硬件進(jìn)行了抽象,向上提供操作USB控制器接口,這一層在linux2.6中被單獨(dú)放在host目錄中,主要用于處理各大廠商USB控制器的不同之處,當(dāng)把USB驅(qū)動(dòng)移植到一個(gè)新的平臺(tái)時(shí)需要完成這個(gè)驅(qū)動(dòng)程序。30USB驅(qū)動(dòng)層次31USB驅(qū)動(dòng)層次USBCore屬于設(shè)備無(wú)關(guān)層,不需要做任何修改,在這個(gè)層次中主要完成定義關(guān)鍵數(shù)據(jù)結(jié)構(gòu)、宏和功能函數(shù),USB協(xié)議轉(zhuǎn)換等核心操作。USBCore在整個(gè)USB驅(qū)動(dòng)中處于核心地位,向下控制USB控制器的數(shù)據(jù)傳輸,向上支持各種各樣的USB設(shè)備。USBDriver對(duì)應(yīng)各種特定的USB設(shè)備,比如U盤(pán),USB鍵盤(pán),USB音箱等,USBDriver使用USBCore提供的服務(wù)完成USB設(shè)備的最終驅(qū)動(dòng)。32USB驅(qū)動(dòng)層次33USB驅(qū)動(dòng)層次USBdriver與最終的具體USB設(shè)備一一對(duì)應(yīng)。例如USB鍵盤(pán),U盤(pán),USB音箱等USB開(kāi)發(fā)主要集中在此層次中344.1.3
USB設(shè)備邏輯層次35USB設(shè)備邏輯層次在USB設(shè)備的邏輯組織中,包含設(shè)備、配置、接口、端點(diǎn)4個(gè)層次36USB設(shè)備邏輯層次37設(shè)備描述符這里設(shè)備指的是USBdevice指物理上不可分離的一個(gè)整體,比如一個(gè)帶音箱的鍵盤(pán)這是一個(gè)整體的概念,并不與具體USB設(shè)備對(duì)應(yīng)38設(shè)備描述符設(shè)備描述符:關(guān)于設(shè)備的通用信息,如供應(yīng)商的ID、產(chǎn)品ID、修訂ID等設(shè)備描述符使用usb_device_descriptor結(jié)構(gòu)體進(jìn)行描述usb_device_descriptor結(jié)構(gòu)體在\include\linux\usb\ch9.h中39設(shè)備描述符40USB設(shè)備邏輯層次41USB設(shè)備邏輯層次每個(gè)USB設(shè)備都提供了不同級(jí)別的配置信息??梢园粋€(gè)或多個(gè)配置信息,不同的配置使設(shè)備表現(xiàn)出不同的功能組合,配置由多個(gè)接口組成42USB設(shè)備邏輯層次配置描述符主要用來(lái)描述接口數(shù)、支持的掛起和恢復(fù)能力以及功率要求USB配置描述符由結(jié)構(gòu)體usb_config_descriptor表示結(jié)構(gòu)usb_config_descriptor在\include\linux\usb\ch9.h中43USB設(shè)備邏輯層次44USB設(shè)備邏輯層次45USB設(shè)備邏輯層次接口與USBdriver一一對(duì)應(yīng),一個(gè)接口代表一個(gè)USB功能,有的USB設(shè)備可能有多個(gè)接口,比如一個(gè)USB鍵盤(pán)上有一個(gè)小音箱,這個(gè)USB設(shè)備就要包含USB鍵盤(pán)和USB音箱兩個(gè)接口。接口由多個(gè)端點(diǎn)構(gòu)成46USB設(shè)備邏輯層次接口描述符:接口類(lèi)、子類(lèi)和適用的協(xié)議,接口備用配置的數(shù)目和端點(diǎn)數(shù)目USB接口描述符由結(jié)構(gòu)體usb_interface_descriptor描述結(jié)構(gòu)體usb_interface_descriptor定義在\include\linux\usb\ch9.h中47USB設(shè)備邏輯層次48USB設(shè)備邏輯層次49USB設(shè)備邏輯層次端點(diǎn)是USB數(shù)據(jù)傳輸?shù)淖罨拘问?,主機(jī)只能通過(guò)端點(diǎn)與USB設(shè)備進(jìn)行通訊。在USB設(shè)備中每個(gè)端點(diǎn)都是在出廠前就設(shè)置好的,而且端點(diǎn)數(shù)的多少是衡量一個(gè)USB設(shè)備的重要標(biāo)準(zhǔn)。在USB系統(tǒng)中每個(gè)端點(diǎn)都有唯一的地址,這是有設(shè)備地址和端點(diǎn)號(hào)給出的,每個(gè)端點(diǎn)都有一定的屬性,一個(gè)USB端點(diǎn)只能在一個(gè)方向承載數(shù)據(jù),因此端點(diǎn)可看作一個(gè)單向的通道。端點(diǎn)0默認(rèn)作為控制端點(diǎn),所有的USB設(shè)備都要實(shí)現(xiàn)端點(diǎn)0。當(dāng)USB設(shè)備連接到USB控制器以后,USB控制器會(huì)向USB設(shè)備的端點(diǎn)0發(fā)送配置信息完成對(duì)USB設(shè)備的枚舉。50USB設(shè)備邏輯層次一個(gè)USB端點(diǎn)只能在一個(gè)方向承載數(shù)據(jù),或者從主機(jī)到設(shè)備(稱(chēng)為輸出端點(diǎn))或者從設(shè)備到主機(jī)(稱(chēng)為輸入端點(diǎn))端點(diǎn)可看作一個(gè)單向的管道,因此一個(gè)具有輸入輸出的USB設(shè)備(如U盤(pán))至少要實(shí)現(xiàn)三個(gè)端點(diǎn),即0號(hào)控制端點(diǎn)、輸入端點(diǎn)、輸出端點(diǎn)。51USB設(shè)備邏輯層次端點(diǎn)描述符:端點(diǎn)地址、方向和類(lèi)型,如果是中斷類(lèi)型的端點(diǎn)則還包括輪詢(xún)頻率端點(diǎn)描述符使用結(jié)構(gòu)體usb_endpoint_descriptor進(jìn)行描述結(jié)構(gòu)體usb_endpoint_descriptor定義在\include\linux\usb\ch9.h中52USB設(shè)備邏輯層次534.1.4
USB傳輸類(lèi)型54USB傳輸類(lèi)型USB端點(diǎn)有4種類(lèi)型,用來(lái)描述數(shù)據(jù)如何被傳送控制端點(diǎn)中斷端點(diǎn)塊端點(diǎn)同步端點(diǎn)55控制端點(diǎn)控制端點(diǎn)被用來(lái)允許對(duì)USB設(shè)備的不同部分存取。通常用作配置設(shè)備,獲取關(guān)于設(shè)備的信息,發(fā)送命令到設(shè)備,或者獲取關(guān)于設(shè)備的狀態(tài)報(bào)告。控制端點(diǎn)在尺寸上常常較?。ㄖ敢淮慰蓚魉偷淖址^少)。每個(gè)USB設(shè)備有一個(gè)控制端點(diǎn)稱(chēng)為“端點(diǎn)0”,被USBCore用來(lái)在插入時(shí)配置設(shè)備。這些傳送由USB協(xié)議保證來(lái)總有足夠的帶寬使它到達(dá)設(shè)備。56中斷端點(diǎn)中斷端點(diǎn)傳送小量的數(shù)據(jù),在每次USB主請(qǐng)求設(shè)備數(shù)據(jù)時(shí),以固定的速率傳送中斷端點(diǎn)傳送對(duì)USB鍵盤(pán)和鼠標(biāo)來(lái)說(shuō)是主要的傳送方法中斷端點(diǎn)傳送還用來(lái)傳送數(shù)據(jù)到USB設(shè)備來(lái)控制設(shè)備,但通常不用來(lái)傳送大量數(shù)據(jù)中斷端點(diǎn)傳送由USB協(xié)議保證來(lái)總有足夠的帶寬使它到達(dá)設(shè)備57塊端點(diǎn)塊端點(diǎn)傳送大量的數(shù)據(jù),這些端點(diǎn)常常比中斷端點(diǎn)大(它們一次可持有更多的字符)。塊端點(diǎn)主要用于傳送不能有任何數(shù)據(jù)丟失的數(shù)據(jù)。這些傳送不被USB協(xié)議保證來(lái)一直使它在特定時(shí)間范圍內(nèi)完成。如果總線上沒(méi)有足夠的空間來(lái)發(fā)送整個(gè)BULK報(bào)文,它被分為多次傳送到或者從設(shè)備。塊端點(diǎn)普遍在打印機(jī),存儲(chǔ)器和網(wǎng)絡(luò)設(shè)備上。58同步端點(diǎn)同步端點(diǎn)也傳送大量數(shù)據(jù),但是這個(gè)數(shù)據(jù)常常不被保證它完成同步端點(diǎn)用在可以處理數(shù)據(jù)丟失的設(shè)備中,并且更多依賴(lài)于保持持續(xù)的數(shù)據(jù)流同步端點(diǎn)主要用于實(shí)時(shí)數(shù)據(jù)收集,例如音頻和視頻設(shè)備,一直都使用這些端點(diǎn)。594.1.5
device、bus、driver60Linux設(shè)備模型Linux設(shè)備模型中三個(gè)很重要的概念就是總線、設(shè)備、驅(qū)動(dòng)即bus、device、driverLinux內(nèi)核中實(shí)際定義了這么一些數(shù)據(jù)結(jié)構(gòu)structbus_typestructdevicestructdevice_driver這三個(gè)重要的數(shù)據(jù)結(jié)構(gòu)都來(lái)自一個(gè)地方include/linux/device.h61總線、設(shè)備、驅(qū)動(dòng)structbus_type中為devices和drivers準(zhǔn)備了兩個(gè)鏈表代表device的結(jié)構(gòu)體structdevice中有兩個(gè)成員structbus_type*bus和structdevice_driver*driver代表driver的結(jié)構(gòu)體structdevice_driver同樣有兩個(gè)成員structbus_type*buf和structdevice*device三者互相關(guān)聯(lián),知道一個(gè)結(jié)構(gòu)體可以迅速找到其他兩個(gè)62總線、設(shè)備、驅(qū)動(dòng)busdriverdevice63USB總線、設(shè)備、驅(qū)動(dòng)USB總線、設(shè)備、驅(qū)動(dòng)三者的關(guān)系與普通驅(qū)動(dòng)相同usbcore的代碼進(jìn)行整個(gè)USB系統(tǒng)的初始化,比如申請(qǐng)strcutbus_typeusb_bus_type,然后會(huì)掃描usb總線,看線上連接了哪些設(shè)備,最終把usb_bus_type中的devices鏈表建立起來(lái)對(duì)于drivers鏈表,就不需要bus方面主動(dòng)了,當(dāng)每個(gè)driver模塊加載時(shí),driver本身去bus上面登記644.1.5
USBdriver65USBdriver在linux內(nèi)核中,適用一個(gè)usb_d
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年標(biāo)準(zhǔn)圖形點(diǎn)陣模塊項(xiàng)目可行性研究報(bào)告
- 2025年新型無(wú)鈷超硬高速鋼項(xiàng)目可行性研究報(bào)告
- 德宏云南德宏職業(yè)學(xué)院2025年春季學(xué)期銀齡教師招募14人筆試歷年參考題庫(kù)附帶答案詳解
- 2025年喇叭開(kāi)關(guān)項(xiàng)目可行性研究報(bào)告
- 2025至2031年中國(guó)串極電機(jī)行業(yè)投資前景及策略咨詢(xún)研究報(bào)告
- 2025年中性護(hù)色洗衣液項(xiàng)目可行性研究報(bào)告
- 2025至2030年中國(guó)香熏爐數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年金剛石開(kāi)槽項(xiàng)目投資價(jià)值分析報(bào)告
- 2025至2030年色織麻棉混紡布項(xiàng)目投資價(jià)值分析報(bào)告
- 2025至2030年狹型扭總成項(xiàng)目投資價(jià)值分析報(bào)告
- 2025年?duì)I口職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試近5年??及鎱⒖碱}庫(kù)含答案解析
- 藥膳與食療理論試題答案
- 2025年蘇州經(jīng)貿(mào)職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試近5年常考版參考題庫(kù)含答案解析
- 緊急維修與故障處理管理制度
- (課件)-幼兒園中班社會(huì)教案《新年里的開(kāi)心事》
- 遼寧中醫(yī)藥大學(xué)附屬醫(yī)院社會(huì)招聘真題
- 2025年潞安化工集團(tuán)招聘筆試參考題庫(kù)含答案解析
- 供應(yīng)鏈管理(第2版)課件:常用的供應(yīng)鏈管理方法
- 腰椎手術(shù)的疑難討論
- 李四光《看看我們的地球》原文閱讀
- 幼兒園一日生活安全課件
評(píng)論
0/150
提交評(píng)論