(簡(jiǎn)易u(yù)sb驅(qū)動(dòng))開(kāi)發(fā)指導(dǎo)

(簡(jiǎn)易u(yù)sb驅(qū)動(dòng))開(kāi)發(fā)指導(dǎo)

ID:33676325

大小:66.52 KB

頁(yè)數(shù):9頁(yè)

時(shí)間:2019-02-28

(簡(jiǎn)易u(yù)sb驅(qū)動(dòng))開(kāi)發(fā)指導(dǎo)_第1頁(yè)
(簡(jiǎn)易u(yù)sb驅(qū)動(dòng))開(kāi)發(fā)指導(dǎo)_第2頁(yè)
(簡(jiǎn)易u(yù)sb驅(qū)動(dòng))開(kāi)發(fā)指導(dǎo)_第3頁(yè)
(簡(jiǎn)易u(yù)sb驅(qū)動(dòng))開(kāi)發(fā)指導(dǎo)_第4頁(yè)
(簡(jiǎn)易u(yù)sb驅(qū)動(dòng))開(kāi)發(fā)指導(dǎo)_第5頁(yè)
資源描述:

《(簡(jiǎn)易u(yù)sb驅(qū)動(dòng))開(kāi)發(fā)指導(dǎo)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫(kù)。

1、實(shí)驗(yàn)七(2)設(shè)備驅(qū)動(dòng)開(kāi)發(fā)指導(dǎo)塊設(shè)備種類多,使用廣泛,其驅(qū)動(dòng)程序的開(kāi)發(fā)也比字符設(shè)備復(fù)雜。通過(guò)本實(shí)驗(yàn),大家要開(kāi)發(fā)一個(gè)實(shí)際塊設(shè)備(U盤(pán))的驅(qū)動(dòng)程序,將能夠更深入地掌握塊設(shè)備驅(qū)動(dòng)程序的開(kāi)發(fā)方法。Linux下已經(jīng)有一個(gè)通用的U盤(pán)驅(qū)動(dòng)程序usb-storage.o,其源程序放在目錄driversusbstorageT*(相對(duì)于內(nèi)核源碼根目錄)。但這個(gè)驅(qū)動(dòng)的實(shí)現(xiàn)相當(dāng)復(fù)雜,本實(shí)驗(yàn)希望開(kāi)發(fā)一個(gè)相對(duì)簡(jiǎn)單些的U盤(pán)驅(qū)動(dòng)程序,不求高性能,只求結(jié)構(gòu)明朗、清晰易懂,主要是讓大家掌握一個(gè)實(shí)際塊設(shè)備的驅(qū)動(dòng)方式,從而加深理解。事實(shí)上,本實(shí)驗(yàn)開(kāi)發(fā)的驅(qū)動(dòng)

2、程序應(yīng)該能夠適用于所有基于Bulkonly傳輸協(xié)議的USB大容量存儲(chǔ)設(shè)備(USBMassStorage),比如USB移動(dòng)硬盤(pán)和USB外置光驅(qū),USB閃存盤(pán)(U盤(pán))只是其中的一種。由于USB大容量存儲(chǔ)設(shè)備具有容量大、速度快、連接靈活、即插即用、總線供電等優(yōu)點(diǎn),它們得到了廣泛使用,掌握這類設(shè)備驅(qū)動(dòng)程序的開(kāi)發(fā)技術(shù)無(wú)疑具有很強(qiáng)的實(shí)用性。實(shí)驗(yàn)內(nèi)容編寫(xiě)一個(gè)U盤(pán)驅(qū)動(dòng)程序myudisk,只要求能夠驅(qū)動(dòng)某個(gè)型號(hào)的U盤(pán),能夠支持U盤(pán)的常規(guī)操作,如命令hexdump、mke2fs和mount等。同時(shí),要求在系統(tǒng)內(nèi)核日志屮顯示出U盤(pán)的容量。若

3、有余力,可增加多分區(qū)支持功能。實(shí)驗(yàn)基礎(chǔ)和思路在教材中P130,講解了如何編寫(xiě)一個(gè)Ramdisk塊設(shè)備驅(qū)動(dòng)程序(sbull.c),稱為radimo;在文獻(xiàn)紅inuxDeviceDrivers》講解了如何編寫(xiě)一個(gè)USB設(shè)備驅(qū)動(dòng)程序,并以Linux源代碼中的usb-skeleton.c為例。雖然前者驅(qū)動(dòng)的并不是一個(gè)實(shí)際的塊設(shè)備,且后者又只是針對(duì)usb字符設(shè)備,但是它們提供了一個(gè)不錯(cuò)的基礎(chǔ),通過(guò)合并我們就能基本得到一個(gè)支持usb塊設(shè)備的驅(qū)動(dòng)程序。之所以說(shuō)基本得到,是因?yàn)楹喜⒑笾皇怯辛藟K設(shè)備、USB設(shè)備的驅(qū)動(dòng)支持框架,但還缺一樣

4、:對(duì)U盤(pán)(USB塊設(shè)備)的實(shí)際訪問(wèn)操作。USB塊設(shè)備的訪問(wèn)方法與USB字符設(shè)備區(qū)別很大,有一套復(fù)朵的協(xié)議。把這樣一套協(xié)議研究清楚,將花費(fèi)大量時(shí)間,也遠(yuǎn)離了我們驅(qū)動(dòng)程序開(kāi)發(fā)的核心。這是一大難點(diǎn),為此我們專門(mén)編寫(xiě)了一個(gè)U盤(pán)訪問(wèn)函數(shù)(myudisk.Bulk^transport),以減輕工作量。下一節(jié)將對(duì)該函數(shù)的使用方法和工作過(guò)程進(jìn)行專門(mén)講解。簡(jiǎn)言之,合并radimo和usb-skeleton這兩個(gè)參考驅(qū)動(dòng)程序,以構(gòu)造整體框架,調(diào)用幫助函數(shù)myudisk_Bulk_transport以訪問(wèn)U盤(pán),從而打造一個(gè)簡(jiǎn)潔的U盤(pán)驅(qū)動(dòng)程序

5、。本節(jié)接下來(lái)介紹這兩個(gè)參考驅(qū)動(dòng)程序:radimo和usb-skeleton,著重講解其「.作原理及合并關(guān)鍵環(huán)節(jié)。參考驅(qū)動(dòng)程序一:塊設(shè)備驅(qū)動(dòng)程序sbull請(qǐng)參看教材P130參考驅(qū)動(dòng)程序二:USB字符設(shè)備驅(qū)動(dòng)程序usb_skeleton請(qǐng)參看內(nèi)核代碼driversusbusb-skeleton.cU盤(pán)驅(qū)動(dòng)的幫助函數(shù)為了幫助大家編寫(xiě)U盤(pán)驅(qū)動(dòng)程序、降低復(fù)雜性,我們以LinuxF的通用USB驅(qū)動(dòng)程序usb-storage為基礎(chǔ),整理岀了一個(gè)U盤(pán)訪問(wèn)函數(shù)myudiskBulktransporto此函數(shù)主要借鑒的是如下幾個(gè)文件:

6、1)drivers/usb/storage/transport.c2)drivers/usb/storage/transport.h3)drivers/scsi/scsi.h函數(shù)原型及其使用該函數(shù)的原型如下所示:intmyudiskBulktransport(structusbdevice*udev,structusb_interface*interface,structcmnd_struct*cs,unsignedchar*bulk_buffcr,intbulk_size,u8bulkinendpointAddr,u

7、8bulkoutendpointAddr);其功能是向USB設(shè)備udev的接口interface發(fā)送一個(gè)命令,進(jìn)行對(duì)應(yīng)的數(shù)據(jù)傳遞,并獲収反饋的狀態(tài)信息。各參數(shù)解釋如下:?udev和interface:U盤(pán)的設(shè)備和接口指針,可直接使用usb.skel中的對(duì)應(yīng)變量。這里有必要澄清兒個(gè)基本概念。USB協(xié)議規(guī)定,分四級(jí)來(lái)描述USB設(shè)備:一個(gè)USB設(shè)備(device)可能有很多配置(configuration);每種配置下又可表現(xiàn)出多個(gè)子設(shè)備,每個(gè)子設(shè)備用一個(gè)接口(interface)表示、真正對(duì)應(yīng)于一個(gè)驅(qū)動(dòng)程序;再細(xì)了講,子設(shè)

8、備與USB控制器之間是通過(guò)管道(pipe)進(jìn)行的,而管道的兩端稱為端點(diǎn)(endpoint)。?cs:指向一個(gè)cmnd_struct結(jié)構(gòu),描述發(fā)給U盤(pán)的命令,這些命令在UF1命令規(guī)范(USBMassStorageClassUFICommandSpecification)中定義。UFI命令規(guī)范是針對(duì)USB移動(dòng)存儲(chǔ)而制定的,實(shí)際上UFT

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

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

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫(huà)的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(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)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。