版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Linux usb gadget 驱动利用Linux CSB gadget设备驱动町以实现些比较有恿思的功能,举两个例子:1、一个攸入式产品中 的某个存储设备,或是一个存储设备的某个分区,町以作为一个U盘被PC;设别,从而非常方便的完成文 件交互,这个功能被广泛的应用手机、数码相机等产品中。2、一个嵌入式设备通过USB连接到你的PC 后,在你的PC端会出现-个新的网络连接,在嵌入式设备上也会仃-个网K设备,你可以配邊它们的IP 地址,并进彳J:网络通讯,俗称USBNETo所有USB通讯的设备端都仃usb device程序,通常称它们为usbhM件。在一些功能简单的设备电,用一兆 专用的可编程U
2、SB控制器就可以了。而在一些运行了类似linux操作系统的复杂的嵌入式系统中,要完成 usb device程序,就会耍求你不仅熟悉usb device控制器的操作,还要熟悉操作系统的驱动架构。我想通过“功能体验”、“驱动调试”、“gadget骡动结构分析”、“编写一个自己的gadget驱动”这 4个方而解析linux usb gadget设备驱动的编与方法。-、linux模拟I;盘功能的实现在駛件环境为华消远见的fs2410f-台,软件环境为linux-2. 6. 26的linux系统上,实现模拟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设备登记*/;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时钟*/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);配宣内核支持U盘模拟 USB Gadget Support USB Peripheral Controller (S3C2410 USB Device Controller) S3C2410 USB Device ControllerS3C2410 udc debug messages USB Gadget DriversFile一backed Storage Gadget3、編译内核#make zlmage#make modules/k fl
9、 drivers/usb/gadget 卜ile_storage. ko加戯驱动,测试功能利用前面的生成的内核,启动系统后,加载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连接设备到windows, windows系统会自动设冬到一个新的U盘加入。格式化U盘,存入文件。卸敬U盘后, 在冃标板上执行
11、如卜操作:# mkdir /mnt/gadget# mount -t vfat /dev/mtdblock2 /mnt/gadget/#ls可以看到w i ndows存入U盘的文件。】、usbnet功能的实现配置内核支持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、编译内核make zImage#make modules在 U drivers/usb gadget 卜 生成g_ether ko3、加载驱动,测试功能利用前面的生成的内核,启动系统厉,加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)连接设备到windows, windows系统会提示安装驱动,根据提示安装上RDIS驱动.这个驱动可以在网络上 找到。此Wwi
14、ndows会新生成个网络连接,配置它的ip地址尊信息。然后就可以和口标系统通过USB实 现网络通讯了这一节主耍把在实现linux模拟U盘功能”过程中的一些调试过程记录卜来并加以解析。1、USB Mass Storage类规范概述USB 组织在universal Serial Bus Mass Storage Class Spaceification 1.1 版本中定义了海录 储设备类(Mass Storage Class)的规范,这个类规范包括四个独工的子类规范,即: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前两个子规范定义了数据/命令/状态在USB上的传输方法。Bulk- Only传输规范仅仅使JljBulk 端点传送数据/命令/状态,CBI传输规范则JIJControl/Bulk/Interrupt三种类型的端点进彳j数据/命 令/状态传送。后两个子规范则定义了存储介质的操作命令。ATA命令规范用駛盘,UFI命令规范是针
16、 对USB移动存储。Microsoft Windows屮提供対Mass Storage协议的支持,因此USB移动设备只盂耍遵循Mass Storage协议來组织数据和处理命令,即对实现与PC机交换数据。而Flash的存储单元组织形式釆川 FAT16文件系统,这样,就町以肖接在Windows的浏览器中通过可移动磁盘来交换数据了,Windows负贵 对FAT16文件系统的管理,USB设备不需要干预FAT16文件系统操作的貝体细节。USB (Host)唯通过描述符了解设备的仃关倍息,根据这些信息,建立起通信,在这些描述符 中,规定了设备所便用的协议、端点情况等。因此,正确地提供描述符,是USB设备正
17、常匸作的先决条 件。Linux-2. 6. 26内核中在利用USB gadget驱动实现模拟I;盘时主要涉及到file_storage. c、s3c2410 _udc. c等驱动文件(这些文件的具体结构,将在下一篇文章中描述)o此时我们想先从这些代码中找到 USB描述描述符,从中确定使用的储类规范,从而确定协议。确定通讯协议是我们调试的基础。疗储类规范是由接I I描述符决定的接I I描述符徐项的定义义如卜: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 以判断出设备足否是存储类,以及属J哪种存储子类和存储介质的操作命令。在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 */默认的情况是:moddata = transport_parm protocol_parm/ Default values二BBB,=SCSI,默认的賦值如F:bint erf aceClass=08 表示:存储类bInterfaceSubClass=0x06 表示:透明的SCSI指令bInterfaceProtocol=0x50 表示:bulk-only 传输2、Bulk-Only传输协议卜面看看Bulk-Only传输协
26、议:(详细的规范请阅读Universal Serial BusMass StorageClassBulk0nly Transport)设备插入到USB后,USB即对设备进彳J:捜索,并耍求设备提供和应的描述符。在USBHost得到1:述描述符后,即完成J设备的配置,识别出为BulkOnly的Mass Storage设备,然后即进入Bulk- Only 传输方式。在此方式卜,USB与设备间的所有数据均通过BulkIn和BulkOut来进行传输,不再 通过控制端点传输任何数据。在这种传输方式匚 仃三种类型的数据在USB和设备之间传送,CBW. CSW和普通数据。CBW(Command Block
27、Wrapper.即命令块包)是从USB Host发送到设备的命令,命令格式遵从接口中的 blnterfaceSubClass所指定的命令块,这里为SCSI传输命令集。USB设备石要将SCSI命令从CBW屮提 取出来,执行相应的命令,完成以后,向Host发出反映当前命令执行状态的CSW (Command Status Wrapper) , Host根据CSW来决定是否继续发 送卜一个CBW或是数据。Host要求CSB设备执行的命令 可能为发送数据,则此时需耍将特定数据传送出去,完毕后发出CSW,以使Host进行卜一步的操 作。USB设备所执行的操作可用卜图描述: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的标识,固定值:43425355h (1 ittle endian).dCBWTag:主机发送的一个命令块标识,设备需耍原样作为dCSWTag (CSW屮的一部分)再发送给Host;主耍 用关联CS卩到对应的CBWedCBWDataTran
29、sferLength:本次CBW命令耍求在命令与回应Z间传输的字节数。如果为0,则不代输数据。bmCBWFlags:反映数据传输的方向,0表示来自Host, 1表示发至Host:bCBWLUN:对多个LU逻辑单元的设备,用來选择具体I标。如果没有多个LU,则写0。bCBWCBLength:命令的长度,范鬧在06.CBWCB:传输的具体命令,符合blnterfaceSubClass. 4*义的命令规范,此处是SCSICSW命令格式如卜:Table Com ma nd Status WrapperdCSWSignature:CSV的标识,固定值:53425355h (little endian)d
30、CSWTag:设置这个标识和CBW中的dCBWTag致,参照上而关JdCBWTag的解释dCSWDat aRe s i due:还需耍传送的数据,此数据根据dCBWDataTransferLength一本次已经传送的数据得到bCSWStatus:指示命令的执行状态。如果命令正确执行,bCSWStatus返回0即可。3、SCSI指令集Bulk-Only的CBW中的CBWCB中的内容即为如卜格式的命令块描述符(Command BlockDescriptor)。SCSI-2有三种字长的命令,6字节、10字节和12字节,Microsoft Windows环境卜支持 12字节长的命令.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:操作代码,农示特定的命令。高3位为Group Code,共有8种组合,即8个组,低5
32、五位为Command Code,可以有32种命令。Logicol unit Number:为了兼容SCSI-1而设的,此处可以不必关心。Logical block address:为鬲位在前,低位在后的逻辑块地址,即扇区地址。第2位为高位,第3、4、5依次为低位.Transfer length:为需耍从逻辑块地址处幵始传输的扇区数(比如在Write命令屮)。Parameter list length:为需要传输的数据长度(比如在Mode Sense命令屮);Allocation length:为初始程用为返回数据所分配的垠人字卩数,此值可以为零,农示不石要传送数据。SCSI指令集的Direct
33、 Accesss类熨存储介质的传输命令有许多,Mass Storage协议只用到了苴中的一些。更多的SCSI指令参见:http:/en. wikipedia. org/wiki/SCSI_command指令代码指令名称说明OlhFormat Unit格式化心储单尤12hInquiry索取器件信息lBhStart/Stopload/unload55hMode select允许Host対外部设备设置参数。5AhMode Sense向host传输参数28hRead (10)Host读存储介质中的二进制数据A8hRead (12)同上,不过比较详细一点25hRead Capacity耍求设备返冋当前容
34、最23hRead Format Capacity查询为前容吊及可用空间03hRequest Sense请求设备向主机返回执行结果,及状态数据OlhRexero Unit返回冬轨道2BhSeek (10)为设备分配到特定地址lDhSend Diagnostic执行固件复位并执行诊断OOhTest Unit Ready请求设备报告是否处JReady状态2FhVerify在心储中验证数据2AhWrite (10)从主机向介质写二进制数据AAhWrite (12)同上,不过比较i羊细2EhWrite and Verify写二进制数据并验证对于不同的命令,其命令块描述符略有不同,其要求的返回内容也有所不
35、同,根据相 应的文档,可以对 每种请求作出适肖的冋应。比如,下面是INQUIRY请求的命令块描述符和苴返回内容的数据格式:如: INQUIRY命令描述符:Table INQUIRY CommandBitByte765432| I 100Operation Code 12h)1Logical Unit NumberReservedEVPD(0)2Page Code3Reserved4Allocation Length5Reserved6Reserved7Reserved8Reserved9Reserved10Reserved11Reserved返冋数据格式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会依次发出INQUIRY. Read Capacity. UFI Mode Sense请求,如果上述请求的返回结果
37、 都正确,则Host会发岀READ命令,读取文件系统0簇0扇区的MBR数据,进入文件系统识别阶段。4、利用USB Virw观察结果町通过USB View软件查看到USB设宣阶段获取到的信息。白 UEEI 也 st 网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 应 Packet Si2e: 64 Interval: Oms二、出现的主要问题在调试过程中遇到了i个问题。现象是
40、:在目标板加我完驱动后,即执行完:# insmod g_file_storageko file= dev/mtdblock2 stall=0 removable=l后,接好USB线。此时windows端设备出令usb storage设备加入,但出现不j盘符。 卜面记录卜调试过程。三、调试过程根据规范,当完成SCSI指令集屮Inquiry命令时,可以出现盘符。所以町以通过bushound软件査 看通讯过程,找出原因。下而是利用bushoundrn在出现问题时采集到的数据。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发出了55 53 42 43开始的CBW命令块,命令码是12, UP Inquiry命令。要求 冃标返冋Inquiry命令耍求的数据,长度是0x24。接卜來设备端通过DI返冋了设备信息。按照规范,在返 冋完了数据后,设备端还应该通过DI向系统返冋CSW的值。但实际的捕获内容并没冇。所以导致不能正确 出现盘符。l:file_storage. c中,发送数据时都会调用到start_transfer ()曲数。在此俅I数中加入printk调 试语句,观察现象
47、。发现只耍加入的调试语句,windows端就能够正常设别设备了。是,可以猜测是因 为需要在连续两次发送之间加上一些延时。在函数中加入udlay (800)后,windows系统可以正常发现 设备了。具体的代码架构,将在下一遍文章中解析。卜面是程序圧常后,用bushound捕获到的数据。红色部分,可以看出设备正确的按照规范在发送完数据厉,返回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以、总结做好CSB gadget驱动、或者USB host骡动调试需耍:韋握一定的知识棊础包括:USB协议、JI体的类设备规范、USB驱动程序架构、USB设备端控制器操作等。合理利用调试工具。包括:USB view、bushound、及一些硬件USB信号分析仪。Linux USB设备缩驱动有两部分组成.一部分是USB设备控制器(USB Device Controller, UDC)驱动、 另-部分是换件无关的功能驱动(如:M标、u盘、usb串II、usb网络等):也可以分为3层的,分别 是:Co
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论