Linux+usb+gadget+驅(qū)動(dòng)(劉洪濤)_第1頁
Linux+usb+gadget+驅(qū)動(dòng)(劉洪濤)_第2頁
Linux+usb+gadget+驅(qū)動(dòng)(劉洪濤)_第3頁
Linux+usb+gadget+驅(qū)動(dòng)(劉洪濤)_第4頁
Linux+usb+gadget+驅(qū)動(dòng)(劉洪濤)_第5頁
已閱讀5頁,還剩46頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、Linux usb gadget 驅(qū)動(dòng)利用Linux CSB gadget設(shè)備驅(qū)動(dòng)町以實(shí)現(xiàn)些比較有恿思的功能,舉兩個(gè)例子:1、一個(gè)攸入式產(chǎn)品中 的某個(gè)存儲(chǔ)設(shè)備,或是一個(gè)存儲(chǔ)設(shè)備的某個(gè)分區(qū),町以作為一個(gè)U盤被PC;設(shè)別,從而非常方便的完成文 件交互,這個(gè)功能被廣泛的應(yīng)用手機(jī)、數(shù)碼相機(jī)等產(chǎn)品中。2、一個(gè)嵌入式設(shè)備通過USB連接到你的PC 后,在你的PC端會(huì)出現(xiàn)-個(gè)新的網(wǎng)絡(luò)連接,在嵌入式設(shè)備上也會(huì)仃-個(gè)網(wǎng)K設(shè)備,你可以配邊它們的IP 地址,并進(jìn)彳J:網(wǎng)絡(luò)通訊,俗稱USBNETo所有USB通訊的設(shè)備端都仃usb device程序,通常稱它們?yōu)閡sbhM件。在一些功能簡單的設(shè)備電,用一兆 專用的可編程U

2、SB控制器就可以了。而在一些運(yùn)行了類似linux操作系統(tǒng)的復(fù)雜的嵌入式系統(tǒng)中,要完成 usb device程序,就會(huì)耍求你不僅熟悉usb device控制器的操作,還要熟悉操作系統(tǒng)的驅(qū)動(dòng)架構(gòu)。我想通過“功能體驗(yàn)”、“驅(qū)動(dòng)調(diào)試”、“gadget騾動(dòng)結(jié)構(gòu)分析”、“編寫一個(gè)自己的gadget驅(qū)動(dòng)”這 4個(gè)方而解析linux usb gadget設(shè)備驅(qū)動(dòng)的編與方法。-、linux模擬I;盤功能的實(shí)現(xiàn)在駛件環(huán)境為華消遠(yuǎn)見的fs2410f-臺(tái),軟件環(huán)境為linux-2. 6. 26的linux系統(tǒng)上,實(shí)現(xiàn)模擬I;盤的功能。向內(nèi)核添加代碼include asm/ arch regsgpio. hinclud

3、e asm/arch/res_clock. h#include 修改arch/arm/mach_s3c2410/machsmdk2410. c/USB device上拉電阻處理*/static void smdk2410_udc_pullup(enum s3c2410_udc_cmd_e cmd)u8 *s3c2410_pullup_info = 9Pull-up enable*,Pull-up disable,UDC reset, in case of; printk(smdk2410_udc: %sn*, s3c2410_pullup_infocmd); s3c2410_gpio_cfgp

4、in(S3C2410_GPG9, S3C2410_GPG9_0UTP); switch (cmd)case S3C2410_UDC_P_EABLE : s3c2410_gpio_setpin(S3C2410_GPG9, 1); /set gpg9 output HIGHbreak;case S3C2410 UDC P DISABLE :s3c2410_gpio_setpin(S3C2410_GPG9, 0); /set gpg9 output LOW break;case S3C2410 UDC P RESET :/FIXME!break;default:break;static struct

5、 s3c2410_udc_mach_info smdk241Oudccfg _initdata 二.udc_command = smdk2410_udc_pu11up,;static struct platform_device *smdk2410_devices _initdata = &s3c_device_usbgadget. /*USB gadget device設(shè)備登記*/;static void _init sdmk2410_init(void)u32 upll_value;set_s3c2410fb_info(&smdk2110_lcdcfg);s3c24xx_udc_set_p

6、latdata(&smdk2410_udc_cfg) ; /* 初始化*/. Hev. platf= &smdl210_mmo_ofg :/* Turn off suspend on both USB ports, and switch the* selectable USB port to USB device mode. */s3c2410_mod辻y_misccr(S3C2410_MISCCR_USBHOST | S3C2410_MISCCR_USBSUSPND0 S3C241O_MISCCR_USBSUSPND1, 0x0);/*役置USB時(shí)鐘*/upll_value =(0x78 S

7、3C2410_PLLCON_MDIVSHIFT)I (0x02 S3C2410_PLLC0N_PDIVSHIFT)I (0x03 S3C2410_PLLC0N_SDIVSHIFT);while (upll.value != readl(S3C2410_UPLLCON) writel(upll_value, S3C2410_UPLLC0N): udelay(20);修改 dr ivers/usb/gadge t/f i le_s to rage, cstatic void start_transfer(struct fsg_dev *fsg, struet usb_ep *ep,struct u

8、sb_request *req, int *pbusy,enum fsg_buffer_state *state)int rc;udelay(800);配宣內(nèi)核支持U盤模擬 USB Gadget Support USB Peripheral Controller (S3C2410 USB Device Controller) S3C2410 USB Device ControllerS3C2410 udc debug messages USB Gadget DriversFile一backed Storage Gadget3、編譯內(nèi)核#make zlmage#make modules/k fl

9、 drivers/usb/gadget 卜ile_storage. ko加戯驅(qū)動(dòng),測試功能利用前面的生成的內(nèi)核,啟動(dòng)系統(tǒng)后,加載g_file_storage. kotiinsmod g_f i 1 e_storage lco# insmod g_file_storageko file=/dev/mtdblock2 stall=0 removable=l0. 03 USB: usb_gadget_register_driver 0 * g_filestorage004 USB: binding gadget driver * g_file.storage10.05 USB: s3c2410_se

10、t_selfpowered()g_file_storage gadget: File-backed Storage Gadget, version: 20 October 2004g_f ile_storage gadget: Number of LUNs=lg_fi1e_storage gadgelunO: ro=0, file: /dev/mtdblock30.06 USB: udc_enable calledsmdk2410_udc: Pull-up enable連接設(shè)備到windows, windows系統(tǒng)會(huì)自動(dòng)設(shè)冬到一個(gè)新的U盤加入。格式化U盤,存入文件。卸敬U盤后, 在冃標(biāo)板上執(zhí)行

11、如卜操作:# mkdir /mnt/gadget# mount -t vfat /dev/mtdblock2 /mnt/gadget/#ls可以看到w i ndows存入U(xiǎn)盤的文件?!?、usbnet功能的實(shí)現(xiàn)配置內(nèi)核支持usbnet USB Gadget Support USB Peripheral Controller (S3C241O USB Device Controller)S3C2410 USB Device Controller*S3C2410 udc debug messages USB Gadget Drivers Ethernet Gadget (with CDC Ether

12、net support)*RNDIS support2、編譯內(nèi)核make zImage#make modules在 U drivers/usb gadget 卜 生成g_ether ko3、加載驅(qū)動(dòng),測試功能利用前面的生成的內(nèi)核,啟動(dòng)系統(tǒng)厲,加4Xg_ether. ko#insmod g_ether ko#ifconfig usbO 192. 168. 1. 120usbO Link encap:Ethernet HWaddr 5E:C5:F6:D1:2B:91inet addr:192. 168. 1. 120 Beast: 192. 168. 1. 255 Mask: 255. 255.

13、255. 0UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:253 errors:0 dropped:0 overruns:0 frame:0TX packets:43 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000RX bytes:35277 (34.4 KiB) TX bytes:10152 (9.9 KiB)連接設(shè)備到windows, windows系統(tǒng)會(huì)提示安裝驅(qū)動(dòng),根據(jù)提示安裝上RDIS驅(qū)動(dòng).這個(gè)驅(qū)動(dòng)可以在網(wǎng)絡(luò)上 找到。此Wwi

14、ndows會(huì)新生成個(gè)網(wǎng)絡(luò)連接,配置它的ip地址尊信息。然后就可以和口標(biāo)系統(tǒng)通過USB實(shí) 現(xiàn)網(wǎng)絡(luò)通訊了這一節(jié)主耍把在實(shí)現(xiàn)linux模擬U盤功能”過程中的一些調(diào)試過程記錄卜來并加以解析。1、USB Mass Storage類規(guī)范概述USB 組織在universal Serial Bus Mass Storage Class Spaceification 1.1 版本中定義了海錄 儲(chǔ)設(shè)備類(Mass Storage Class)的規(guī)范,這個(gè)類規(guī)范包括四個(gè)獨(dú)工的子類規(guī)范,即:1. USB Mass Storage Class Control/Bulk/Interrupt (CBI) Transport

15、2. USB Mass Storage Class Bulk-Only Transport3. USB Mass Storage Class ATA Command Block4. USB Mass Storage Class UFI Command Specification前兩個(gè)子規(guī)范定義了數(shù)據(jù)/命令/狀態(tài)在USB上的傳輸方法。Bulk- Only傳輸規(guī)范僅僅使JljBulk 端點(diǎn)傳送數(shù)據(jù)/命令/狀態(tài),CBI傳輸規(guī)范則JIJControl/Bulk/Interrupt三種類型的端點(diǎn)進(jìn)彳j數(shù)據(jù)/命 令/狀態(tài)傳送。后兩個(gè)子規(guī)范則定義了存儲(chǔ)介質(zhì)的操作命令。ATA命令規(guī)范用駛盤,UFI命令規(guī)范是針

16、 對(duì)USB移動(dòng)存儲(chǔ)。Microsoft Windows屮提供対Mass Storage協(xié)議的支持,因此USB移動(dòng)設(shè)備只盂耍遵循Mass Storage協(xié)議來組織數(shù)據(jù)和處理命令,即對(duì)實(shí)現(xiàn)與PC機(jī)交換數(shù)據(jù)。而Flash的存儲(chǔ)單元組織形式釆川 FAT16文件系統(tǒng),這樣,就町以肖接在Windows的瀏覽器中通過可移動(dòng)磁盤來交換數(shù)據(jù)了,Windows負(fù)貴 對(duì)FAT16文件系統(tǒng)的管理,USB設(shè)備不需要干預(yù)FAT16文件系統(tǒng)操作的貝體細(xì)節(jié)。USB (Host)唯通過描述符了解設(shè)備的仃關(guān)倍息,根據(jù)這些信息,建立起通信,在這些描述符 中,規(guī)定了設(shè)備所便用的協(xié)議、端點(diǎn)情況等。因此,正確地提供描述符,是USB設(shè)備正

17、常匸作的先決條 件。Linux-2. 6. 26內(nèi)核中在利用USB gadget驅(qū)動(dòng)實(shí)現(xiàn)模擬I;盤時(shí)主要涉及到file_storage. c、s3c2410 _udc. c等驅(qū)動(dòng)文件(這些文件的具體結(jié)構(gòu),將在下一篇文章中描述)o此時(shí)我們想先從這些代碼中找到 USB描述描述符,從中確定使用的儲(chǔ)類規(guī)范,從而確定協(xié)議。確定通訊協(xié)議是我們調(diào)試的基礎(chǔ)。療儲(chǔ)類規(guī)范是由接I I描述符決定的接I I描述符徐項(xiàng)的定義義如卜:OffsetFieldSizeValueDescnptionDbL&nfftti1;NumberSize of this descrptor in bytes1bDesmpgfTyg1Con

18、stan:INTERFACE DescriatorType2binte/faceNi/mber肆NumberNumber of this interface. Zero-based vaiu色 d?rTying the index ir tne array of concurrent interfaces supoorted by th s con figureton3bA ite/nste Setting1Numberba te used to select this alternate settirtg for the interface dertifiec in !hr pnor fie

19、idAbNumEnn points1NumberNumber of endpoints used ny this interface rexc uding endpoint zeroIf this value is zero, this rterface an y uses the Default Control ice5D/nreace ClassiC;assC.8S9 coae (assigned by tne USS-IFI A value of zero is reserved for fuurestandardization.It th s field is set to FFH.

20、!he interface class s vendor-specific.AH other values are reserved for assignrrent by the USB-IF.6bimeffaceSutsCjass1StbCiassSuoclass code iassigned by tne USB-jF) These codes are qualified by the vaiue of the bfnterfsceCfass fieldIt the interface Ci ass t:e d i& reset rc zero, this fieic must also

21、be reset to zero.If the bfnferfaceCfass fie*d is not set :o FFH, all values are reserved for assianirent oy the JSB-R7D/nfe.faceP/oTaco/iProtocolProtocol code (ass.gnea oy the USS ; These codes are qua i;ed by the value of the bfnterfaceCf&ss and the bfnterfaceSubCioss fields If an interface aupport

22、s class-specmc requests. this code identifies the protocols that the device uses- as defined by the specificat &n othe aevice cassif this held is reset to zero, the device does no【use a class-specrfic protocol on th s interface.If mis c;d 冷 ser to, the aevice usesa venoor-specific protoco for this i

23、nterface.8j interface誓IndexIndex of string descriptor deseribrng th interface, blnterf aceClass x blnterfaceSubClass bint erf aceProtocolnf 以判斷出設(shè)備足否是存儲(chǔ)類,以及屬J哪種存儲(chǔ)子類和存儲(chǔ)介質(zhì)的操作命令。在file-storage, c文件中./* USB protocol value =the transportmethod */define USB_PR_CBI#define USB_PR_CB#define USB PR BULK0x000x01

24、0x50/ Control/Bulk/Interrupt/ Control/Bulk w/o interrupt/ Bulk-only/* USB subclass value =#define USB_SC_RBC0x01/ Reduced Block Commands (flash)#define USB_SC_80200x02/ SFF-8020i, MMC-2, ATAPI (CD-ROM)define USB_SC_QIC0x03/ QIC-157 (tape)define USB_SC_UFI0x04/ UFI (floppy)#define USB_SC_80700x05/ SF

25、F-8070i (removable)define USB_SC_SCSI0x06/ Transparent SCSIthe protocolencapsulation */默認(rèn)的情況是:moddata = transport_parm protocol_parm/ Default values二BBB,=SCSI,默認(rèn)的賦值如F:bint erf aceClass=08 表示:存儲(chǔ)類bInterfaceSubClass=0x06 表示:透明的SCSI指令bInterfaceProtocol=0x50 表示:bulk-only 傳輸2、Bulk-Only傳輸協(xié)議卜面看看Bulk-Only傳輸協(xié)

26、議:(詳細(xì)的規(guī)范請(qǐng)閱讀Universal Serial BusMass StorageClassBulk0nly Transport)設(shè)備插入到USB后,USB即對(duì)設(shè)備進(jìn)彳J:捜索,并耍求設(shè)備提供和應(yīng)的描述符。在USBHost得到1:述描述符后,即完成J設(shè)備的配置,識(shí)別出為BulkOnly的Mass Storage設(shè)備,然后即進(jìn)入Bulk- Only 傳輸方式。在此方式卜,USB與設(shè)備間的所有數(shù)據(jù)均通過BulkIn和BulkOut來進(jìn)行傳輸,不再 通過控制端點(diǎn)傳輸任何數(shù)據(jù)。在這種傳輸方式匚 仃三種類型的數(shù)據(jù)在USB和設(shè)備之間傳送,CBW. CSW和普通數(shù)據(jù)。CBW(Command Block

27、Wrapper.即命令塊包)是從USB Host發(fā)送到設(shè)備的命令,命令格式遵從接口中的 blnterfaceSubClass所指定的命令塊,這里為SCSI傳輸命令集。USB設(shè)備石要將SCSI命令從CBW屮提 取出來,執(zhí)行相應(yīng)的命令,完成以后,向Host發(fā)出反映當(dāng)前命令執(zhí)行狀態(tài)的CSW (Command Status Wrapper) , Host根據(jù)CSW來決定是否繼續(xù)發(fā) 送卜一個(gè)CBW或是數(shù)據(jù)。Host要求CSB設(shè)備執(zhí)行的命令 可能為發(fā)送數(shù)據(jù),則此時(shí)需耍將特定數(shù)據(jù)傳送出去,完畢后發(fā)出CSW,以使Host進(jìn)行卜一步的操 作。USB設(shè)備所執(zhí)行的操作可用卜圖描述:CBW的格式如卜:Table Co

28、inmaikd Block rapper0-3dCBWSinatute4-7dCBWTQg8-11(08h0Bh)dCB WDaraTransfei Length12(oai)bmCBlVFiags13(ODh)Reserved (0)bCBWLUN14(OEh)Reserved (0)15-30OFh-lEh)CBWCBdCB鞘Signature:CBiT的標(biāo)識(shí),固定值:43425355h (1 ittle endian).dCBWTag:主機(jī)發(fā)送的一個(gè)命令塊標(biāo)識(shí),設(shè)備需耍原樣作為dCSWTag (CSW屮的一部分)再發(fā)送給Host;主耍 用關(guān)聯(lián)CS卩到對(duì)應(yīng)的CBWedCBWDataTran

29、sferLength:本次CBW命令耍求在命令與回應(yīng)Z間傳輸?shù)淖止?jié)數(shù)。如果為0,則不代輸數(shù)據(jù)。bmCBWFlags:反映數(shù)據(jù)傳輸?shù)姆较颍?表示來自Host, 1表示發(fā)至Host:bCBWLUN:對(duì)多個(gè)LU邏輯單元的設(shè)備,用來選擇具體I標(biāo)。如果沒有多個(gè)LU,則寫0。bCBWCBLength:命令的長度,范鬧在06.CBWCB:傳輸?shù)木唧w命令,符合blnterfaceSubClass. 4*義的命令規(guī)范,此處是SCSICSW命令格式如卜:Table Com ma nd Status WrapperdCSWSignature:CSV的標(biāo)識(shí),固定值:53425355h (little endian)d

30、CSWTag:設(shè)置這個(gè)標(biāo)識(shí)和CBW中的dCBWTag致,參照上而關(guān)JdCBWTag的解釋dCSWDat aRe s i due:還需耍傳送的數(shù)據(jù),此數(shù)據(jù)根據(jù)dCBWDataTransferLength一本次已經(jīng)傳送的數(shù)據(jù)得到bCSWStatus:指示命令的執(zhí)行狀態(tài)。如果命令正確執(zhí)行,bCSWStatus返回0即可。3、SCSI指令集Bulk-Only的CBW中的CBWCB中的內(nèi)容即為如卜格式的命令塊描述符(Command BlockDescriptor)。SCSI-2有三種字長的命令,6字節(jié)、10字節(jié)和12字節(jié),Microsoft Windows環(huán)境卜支持 12字節(jié)長的命令.Table Typ

31、ical Command Block for Most CommandsByteBit765432 100Operation Code1Logical Unit NumberReserved2(MSB)345logical Block Address (if required)(LSB6Reserved7(MSB)Transfer or Parameter List or Allocation Length 8(LSB)! 9Reserved10Reserved11ReservedOperation Code:操作代碼,農(nóng)示特定的命令。高3位為Group Code,共有8種組合,即8個(gè)組,低5

32、五位為Command Code,可以有32種命令。Logicol unit Number:為了兼容SCSI-1而設(shè)的,此處可以不必關(guān)心。Logical block address:為鬲位在前,低位在后的邏輯塊地址,即扇區(qū)地址。第2位為高位,第3、4、5依次為低位.Transfer length:為需耍從邏輯塊地址處幵始傳輸?shù)纳葏^(qū)數(shù)(比如在Write命令屮)。Parameter list length:為需要傳輸?shù)臄?shù)據(jù)長度(比如在Mode Sense命令屮);Allocation length:為初始程用為返回?cái)?shù)據(jù)所分配的垠人字卩數(shù),此值可以為零,農(nóng)示不石要傳送數(shù)據(jù)。SCSI指令集的Direct

33、 Accesss類熨存儲(chǔ)介質(zhì)的傳輸命令有許多,Mass Storage協(xié)議只用到了苴中的一些。更多的SCSI指令參見:http:/en. wikipedia. org/wiki/SCSI_command指令代碼指令名稱說明OlhFormat Unit格式化心儲(chǔ)單尤12hInquiry索取器件信息lBhStart/Stopload/unload55hMode select允許Host対外部設(shè)備設(shè)置參數(shù)。5AhMode Sense向host傳輸參數(shù)28hRead (10)Host讀存儲(chǔ)介質(zhì)中的二進(jìn)制數(shù)據(jù)A8hRead (12)同上,不過比較詳細(xì)一點(diǎn)25hRead Capacity耍求設(shè)備返冋當(dāng)前容

34、最23hRead Format Capacity查詢?yōu)榍叭莸跫翱捎每臻g03hRequest Sense請(qǐng)求設(shè)備向主機(jī)返回執(zhí)行結(jié)果,及狀態(tài)數(shù)據(jù)OlhRexero Unit返回冬軌道2BhSeek (10)為設(shè)備分配到特定地址lDhSend Diagnostic執(zhí)行固件復(fù)位并執(zhí)行診斷OOhTest Unit Ready請(qǐng)求設(shè)備報(bào)告是否處JReady狀態(tài)2FhVerify在心儲(chǔ)中驗(yàn)證數(shù)據(jù)2AhWrite (10)從主機(jī)向介質(zhì)寫二進(jìn)制數(shù)據(jù)AAhWrite (12)同上,不過比較i羊細(xì)2EhWrite and Verify寫二進(jìn)制數(shù)據(jù)并驗(yàn)證對(duì)于不同的命令,其命令塊描述符略有不同,其要求的返回內(nèi)容也有所不

35、同,根據(jù)相 應(yīng)的文檔,可以對(duì) 每種請(qǐng)求作出適肖的冋應(yīng)。比如,下面是INQUIRY請(qǐng)求的命令塊描述符和苴返回內(nèi)容的數(shù)據(jù)格式:如: INQUIRY命令描述符:Table INQUIRY CommandBitByte765432| I 100Operation Code 12h)1Logical Unit NumberReservedEVPD(0)2Page Code3Reserved4Allocation Length5Reserved6Reserved7Reserved8Reserved9Reserved10Reserved11Reserved返冋數(shù)據(jù)格式Table INQUIRY Data F

36、ormatBitByte75432 1 00ReservedPeripheral Dewe Type1RMBReserved2ISO VersionECMA VeonANSI Version (OOh)3ReservedResponse Data Format4Additional.ength (31)5Reserved78Vendor Intormation1516Product Identification3132Product Revision Leveln.nn35Host會(huì)依次發(fā)出INQUIRY. Read Capacity. UFI Mode Sense請(qǐng)求,如果上述請(qǐng)求的返回結(jié)果

37、 都正確,則Host會(huì)發(fā)岀READ命令,讀取文件系統(tǒng)0簇0扇區(qū)的MBR數(shù)據(jù),進(jìn)入文件系統(tǒng)識(shí)別階段。4、利用USB Virw觀察結(jié)果町通過USB View軟件查看到USB設(shè)宣階段獲取到的信息。白 UEEI 也 st 網(wǎng)troll erH Fil checked Storaas Gactetl Vtare Virtual IEB HiiL EEd Host Control 1 erRevision Nuiiter;3.12Fil e ked Storage Gadget htenufacturer: Linux 2.6 26.5 nith s3cS410 uck Serial Hunter: 37

38、334V?更775Speed: 12Mo/s (珀 1)USB 曲 sion; 1.10Device Qass: 00(ifc )Device Subd ass: 00Device Protoool: COMaxinium Defaul t Endpoint Si壬:16NiDiiber of Configurations: 1 fedor I d: 0525Pnxtet Id: a4a5Config Hunter: 1Nunber of I nterfaces: 1Attributes: cOHanover Itedsd: 2nAI trterfaoe Winter 0 tte: usb-s

39、tores Alternate Nimber: 0 ass: 08(stor.) Sib Cl ass: 06 Protocol: 50 Nuirber of Endpoints: 2Erdpoint Address: 81 Direction; m Attribute: 2 Type: Bulk btei Packet Siae: 64 Interval: OmsErdpoint Address: 02 Direction: out Attribute: 2Type: Bulk 應(yīng) Packet Si2e: 64 Interval: Oms二、出現(xiàn)的主要問題在調(diào)試過程中遇到了i個(gè)問題?,F(xiàn)象是

40、:在目標(biāo)板加我完驅(qū)動(dòng)后,即執(zhí)行完:# insmod g_file_storageko file= dev/mtdblock2 stall=0 removable=l后,接好USB線。此時(shí)windows端設(shè)備出令usb storage設(shè)備加入,但出現(xiàn)不j盤符。 卜面記錄卜調(diào)試過程。三、調(diào)試過程根據(jù)規(guī)范,當(dāng)完成SCSI指令集屮Inquiry命令時(shí),可以出現(xiàn)盤符。所以町以通過bushound軟件査 看通訊過程,找出原因。下而是利用bushoundrn在出現(xiàn)問題時(shí)采集到的數(shù)據(jù)。Dev Phase DataInfoTimeCmd Phase OfsGET DESCRIPTROus1.1.026DI120

41、11001 -00000010-25 05a5 a4- 120301 02.%1.2.00301 1.2.1626CTL80060002 -00000900GETDESCRIPTR14us2. 1.026DI09022000 -010101cO-013. 9ms2. 2.026CTL80060002 -00002000GET DESCRIPTR16us3.1.026DI090220oo -010101cO- 01 0904 00- 000208 06 4. 9ms3. 2.050050705 -81024000-00 0705 02-024000 00 P.3. 2. 1626CTL80060

42、003 -00000200GETDESCRIPTR60us4.1.026DI09022000 -010104cO-0126CTL80060001 - 0000 12 003. 9ms2. 2.026 DI01 033. 9ms3. 1.0GET DESCRIPTR15us26DI01 03 09 04 3. 9ms6. 1.026CTL80 06 03 03 -09 01 02 00GET DESCRIPTRlOus26 CTL80 06 00 03 - 00 00 04 005. 1.01.2. 1626DIla 03 4. 0ms6. 2.026CTL80 06 0303 -0904 la

43、 00GET DESCRIPTR18us7. 1. 026DIla 03 3300 -3700 32 00 - 30 00 34 00 - 31 00 37 0035003600 -37003700 - 35 005. 6. 7. 7 57. 2. 1626CTL00090100 -00000000.3. 7. 2. 0. 4. 1. 7. 4. 9ms7. 2. 0SET COXFIG16us8. 1. 026 CTL01Ob 00 00 一 0000 00 00SETINTERFACE60ms9. 1.026CTLalfe 0000 - 000001 0026CLASS62ms10. 1.

44、 0DI003. 9ms10. 2. 026DO55 53 4243 - 08 60 eO 86 - 24 00 00 00 - 80 00 06 12USBC.$00 00 00 24 -11. 1. 1626DI00 80 02 02 - Linux 1 0ms46 69 6c 65 -Stor Gadget12. 1. 1630 33 31 32031212. 1.3226CTL80 06 00 02 -985us11. 1.000 00 20 0000 00 000000If 00 0000-4c696e75- 7820202012. 1.02d 53 7

45、46f-72204761-64676571File-GET26DI09 022000 - 010104c0 - 01 090100-00020806 41ms13. 2. 050 050705 - 81021000 - 00 070502-02400000P.13.2. 1626CTL80 060002 - 00002000GET DESCRIPTR2. 7sc14. 1.026DI09 022000 - 010104c0 - 01 090400- 00020806 14. 2. 050 050705 - 81021000 - 00 070502-02100000P.DESCRIPTR893m

46、s13. 1.014.2. 1626USTS 05 00 00 cOno response2. 8sc15. 1.0注意上面紅色部分的代碼,DO發(fā)出了55 53 42 43開始的CBW命令塊,命令碼是12, UP Inquiry命令。要求 冃標(biāo)返冋Inquiry命令耍求的數(shù)據(jù),長度是0x24。接卜來設(shè)備端通過DI返冋了設(shè)備信息。按照規(guī)范,在返 冋完了數(shù)據(jù)后,設(shè)備端還應(yīng)該通過DI向系統(tǒng)返冋CSW的值。但實(shí)際的捕獲內(nèi)容并沒冇。所以導(dǎo)致不能正確 出現(xiàn)盤符。l:file_storage. c中,發(fā)送數(shù)據(jù)時(shí)都會(huì)調(diào)用到start_transfer ()曲數(shù)。在此俅I數(shù)中加入printk調(diào) 試語句,觀察現(xiàn)象

47、。發(fā)現(xiàn)只耍加入的調(diào)試語句,windows端就能夠正常設(shè)別設(shè)備了。是,可以猜測是因 為需要在連續(xù)兩次發(fā)送之間加上一些延時(shí)。在函數(shù)中加入udlay (800)后,windows系統(tǒng)可以正常發(fā)現(xiàn) 設(shè)備了。具體的代碼架構(gòu),將在下一遍文章中解析。卜面是程序圧常后,用bushound捕獲到的數(shù)據(jù)。紅色部分,可以看出設(shè)備正確的按照規(guī)范在發(fā)送完數(shù)據(jù)厲,返回CS弔信息。55 53 4243 08 2O.f3 86-240000 00 8C 00 06 12 USBC. .$._ 987us1LWH 丄 16a I 卩00 *0 0024-00 00 00 00 CO 00 00 00 00 00 OO$0020

48、0202IfOC 0000-4;696e75-78202020Linux1.0ms1ZL046696c65-2d53 74旅.72 20 4761 646?65理“Tik-StcrGeLket11L16卩30 33 313203121213226以5553 4253.08 20G86.OJOOOOOO.OCUSBS.1.0ms13丄0553 42 43 U8 2U心力:c UUUU UJ 8U UU Qa23USBC.我IM?暇00 00 0000 - OO 00 00 ft - 00 00 OO 00 - 0000 CO1414600 CO 0000-00 00 00 00 CO 0000

49、00-0000 OO oc2.0iqs15.E000 CO 0000 - DO 00 00 OO. CO 0000 OD - 00 00 OO oc15JJ6300 CO 00 00 - 00 00 00 OO15.1,325553 4253 02 20 3 S6 fc 00 00 00 -01USBS .99 沁16丄Q55 53 42 43.02 20 f326 12 00 00 00-50 000c 03USBC1 Oms17J.0OQDQOQ12OOQOQO(IDaiOQOQQQCI(IQMCI171 1626 DI70 CO 06 00 00 00 00 Oa-COOOOOOD. 2

50、9 00 00 OCp)1.0ms18.1.0oom184 U2以5553 4253 08 20 5 86-03 0Q 00 00-00USBS 19丄0以、總結(jié)做好CSB gadget驅(qū)動(dòng)、或者USB host騾動(dòng)調(diào)試需耍:韋握一定的知識(shí)棊礎(chǔ)包括:USB協(xié)議、JI體的類設(shè)備規(guī)范、USB驅(qū)動(dòng)程序架構(gòu)、USB設(shè)備端控制器操作等。合理利用調(diào)試工具。包括:USB view、bushound、及一些硬件USB信號(hào)分析儀。Linux USB設(shè)備縮驅(qū)動(dòng)有兩部分組成.一部分是USB設(shè)備控制器(USB Device Controller, UDC)驅(qū)動(dòng)、 另-部分是換件無關(guān)的功能驅(qū)動(dòng)(如:M標(biāo)、u盤、usb串II、usb網(wǎng)絡(luò)等):也可以分為3層的,分別 是:Co

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論