嵌入式linux下的usb設(shè)備驅(qū)動(dòng)技術(shù)

嵌入式linux下的usb設(shè)備驅(qū)動(dòng)技術(shù)

ID:28152669

大?。?3.00 KB

頁數(shù):4頁

時(shí)間:2018-12-08

嵌入式linux下的usb設(shè)備驅(qū)動(dòng)技術(shù)_第1頁
嵌入式linux下的usb設(shè)備驅(qū)動(dòng)技術(shù)_第2頁
嵌入式linux下的usb設(shè)備驅(qū)動(dòng)技術(shù)_第3頁
嵌入式linux下的usb設(shè)備驅(qū)動(dòng)技術(shù)_第4頁
資源描述:

《嵌入式linux下的usb設(shè)備驅(qū)動(dòng)技術(shù)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫。

1、嵌入式Linux下的USB設(shè)備驅(qū)動(dòng)技術(shù)Linux以其穩(wěn)定、高效、易定制、硬件支持廣泛、源代碼開放等特點(diǎn),已在嵌入式領(lǐng)域迅速崛起,被國際上許多大型的跨國企業(yè)用作嵌入式產(chǎn)晶的系統(tǒng)平臺(tái)。USB是UniversalSerialBus(通用串行總線)的縮寫,是1995年由Microsoft、Compaq、舊M等公司聯(lián)合制定的一種新的PC串行通信協(xié)議。它是-種快速、靈活的總線接口。與其它通信接口相比較,USB接U的最人特點(diǎn)是易于使川,這也足USB的主要設(shè)計(jì)R標(biāo)。USB的成功得益于在USB標(biāo)準(zhǔn)屮除定義丫通信的物理S和電器S標(biāo)準(zhǔn)外。還定義了一套相對(duì)完整的軟件I辦議堆桟。這使

2、得多數(shù)USB設(shè)備都很容易在各種T?臺(tái)上工作。作為一種高速總線接UI,USB適川丁?多種沒備(如數(shù)碼相機(jī)、MP3播放器、商速數(shù)據(jù)采集沒備等)。另外,USB接U還支持熱插拔,而且所科的配H過程都由系統(tǒng)£

3、動(dòng)完成,無須用戶干預(yù)。1Linux下的USB設(shè)備驅(qū)動(dòng)在Linux內(nèi)核的不斷升級(jí)過程中,驅(qū)動(dòng)程序的結(jié)構(gòu)相對(duì)穩(wěn)定。凼于USB設(shè)備也是外圍設(shè)備的一種,因此,它的驅(qū)動(dòng)程序結(jié)構(gòu)與普通設(shè)備的驅(qū)動(dòng)程序相同。Linux系統(tǒng)的設(shè)備分為字符'沒備(CharDevice)和塊設(shè)備(BlockDevice)。字符設(shè)備支持而A塊字符的I/0操作,它不通過系統(tǒng)的快速緩存,而只支持順序存取。

4、塊設(shè)備則支持刖向塊的I/O操作,所有塊設(shè)備的i/o操作都通過在內(nèi)核地址空間的i/o緩沖區(qū)進(jìn)行,可以支持幾乎任意長度和任意位置上的I/O請(qǐng)求。塊設(shè)備與字符設(shè)備還有一點(diǎn)不同,就是塊設(shè)備必須能夠隨機(jī)存取(RandomAccess),字符沒備則沒奮這個(gè)要求。典型的字符沒備包拈鼠標(biāo)、鍵盤、串行U等,而塊設(shè)備主要包括硬盤軟盤設(shè)備、CD-Rom等。由十USB設(shè)備主要都是通過快速串行通訊來讀寫數(shù)裾,因此一般都可作為字符設(shè)備來進(jìn)行處理。2Linux卜的USBcore2.1Linux中USBcore與USB的結(jié)構(gòu)關(guān)系Linux操作系統(tǒng)屮奮?一個(gè)叫做“USBcore”的子系統(tǒng),川

5、提供支持USB沒備驅(qū)動(dòng)程序的API和USB主機(jī)控制器的驅(qū)動(dòng)程呼。同時(shí)提供有許多數(shù)裾結(jié)構(gòu)、宏定義和功能函數(shù)來對(duì)硬件或設(shè)備進(jìn)行支持。在Linux下編寫USB設(shè)備的驅(qū)動(dòng)程序時(shí),從嚴(yán)格意義h講,就是使用這呰USBcore的了系統(tǒng)所定義的數(shù)據(jù)結(jié)構(gòu)、宏和函數(shù)來編3數(shù)據(jù)的處理功能。在Linux下,core、hostcontroller和driver三者之間的關(guān)系如圖1所示。91Linux下的USBtt構(gòu)央系ffl2.2USBcore的初始化USBcore從USB子系統(tǒng)的初始化開始。USBf?系統(tǒng)的初始化則在文件drivers/usb/core/usb.c里。其代碼如下:s

6、ubsys_initcall(usb」nit);module_exit(usb_exit);代碼中的subsysjnitcall是一個(gè)宏,相當(dāng)于module_init,只不過因?yàn)檫@部分代碼足核心,開發(fā)者通常把它看作-個(gè)子系統(tǒng),而不僅僅足一個(gè)模塊。因?yàn)閁SBcore模塊代表的不是某一個(gè)設(shè)備,而是所有USB設(shè)備賴以生存的模塊。W此,在Linux屮,像這樣把一個(gè)類別的設(shè)備驅(qū)動(dòng)歸結(jié)為一個(gè)了?系統(tǒng)(比如PCI了?系統(tǒng)、scsi了?系統(tǒng)等)。菽木上,drivers/R錄下而第一層的每個(gè)n錄都可算作一個(gè)子系統(tǒng),因?yàn)樗鼈兇砹艘活愒O(shè)備。一般地,usbjnit是真K的初始化函

7、數(shù),而usb_exit()則是整個(gè)USB子系統(tǒng)結(jié)柬時(shí)的清理函數(shù):staticint_initusbjnit(void)Iretval=bus—register(&usb一busjype);retval=U9b_register_device_driver(&usb__gener-ic-driver,THIS一MODULE);函數(shù)usbinit主要完成初始化和汴冊(cè)設(shè)備2.3USB里的設(shè)備模型Linux里一個(gè)很重要的概念是設(shè)備模型。對(duì)于驅(qū)動(dòng)來說,設(shè)備的概念就是總線和與其相連的各種設(shè)備。在內(nèi)核里,總線、設(shè)備、驅(qū)動(dòng)也就是bus、device、driver是設(shè)備模型很

8、重要的三個(gè)概念,它們都有自己專屬的結(jié)構(gòu)。在include/linux/devide.h里的定義為:structbus_type{}:structdevice{);structdevice_driver{};每次出現(xiàn)一個(gè)設(shè)備都要h'd總線注冊(cè),每次出現(xiàn)一個(gè)驅(qū)動(dòng),也要M總線注冊(cè)。系統(tǒng)初始化時(shí),應(yīng)掃描連接許多設(shè)備,并為每一個(gè)設(shè)備建立一個(gè)structdevice的變雖。每一次都應(yīng)有一個(gè)驅(qū)動(dòng)程炸,并要準(zhǔn)備-個(gè)structdevice_driver結(jié)構(gòu)的變量。還要把這作變雖加入和皮的鍵表(如把device插入devices鏈表,driver插入drivers鏈表)。這樣

9、,通過總線就能找到每一個(gè)設(shè)備和每一個(gè)驅(qū)動(dòng)。然而,假如

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。