(簡易usb驅(qū)動)開發(fā)指導

(簡易usb驅(qū)動)開發(fā)指導

ID:33676325

大小:66.52 KB

頁數(shù):9頁

時間:2019-02-28

(簡易usb驅(qū)動)開發(fā)指導_第1頁
(簡易usb驅(qū)動)開發(fā)指導_第2頁
(簡易usb驅(qū)動)開發(fā)指導_第3頁
(簡易usb驅(qū)動)開發(fā)指導_第4頁
(簡易usb驅(qū)動)開發(fā)指導_第5頁
資源描述:

《(簡易usb驅(qū)動)開發(fā)指導》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在工程資料-天天文庫。

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

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

3、有余力,可增加多分區(qū)支持功能。實驗基礎和思路在教材中P130,講解了如何編寫一個Ramdisk塊設備驅(qū)動程序(sbull.c),稱為radimo;在文獻紅inuxDeviceDrivers》講解了如何編寫一個USB設備驅(qū)動程序,并以Linux源代碼中的usb-skeleton.c為例。雖然前者驅(qū)動的并不是一個實際的塊設備,且后者又只是針對usb字符設備,但是它們提供了一個不錯的基礎,通過合并我們就能基本得到一個支持usb塊設備的驅(qū)動程序。之所以說基本得到,是因為合并后只是有了塊設備、USB設備的驅(qū)動支持框架,但還缺一樣

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

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

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

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

當前文檔最多預覽五頁,下載文檔查看全文

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

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