linux下USB大容量存储设备驱动分析和实现.docVIP

linux下USB大容量存储设备驱动分析和实现.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
linux下USB大容量存储设备驱动分析和实现

linux下USB大容量存储设备驱动分析和实现   【摘要】本文介绍了linux USB子系统架构及USB协议,重点分析了linux下USB大容量存储设备驱动程序,并结合U盘特点对设备驱动程序做了可靠的裁剪,以交叉编译和控制台调试的方式,在TQ2440 ARM开发板上成功实现了设备驱动模块的加载与卸载,最终达到了U盘热插拔和读写的目的。   【关键词】USB;大容量存储设备;设备驱动   USB(universal serial bus)通用串行总线是一种高速、支持即插即用和热插拔的总线标准,由intel、microsoft等公司制定,适用于多种USB外围设备(U盘、USB键盘鼠标、USB摄像头等)与主机之间的高速数据传输,USB2.0协议规定的最大传输速率可达480Mb/s,突破了传统串行总线的带宽限制。   Linux作为一种性能稳定,可定制,兼容性强的开源操作系统,在嵌入式设备中得到了广泛应用,且开发者可以方便地获得linux社区提供的强大技术支持,从而能够大大降低开发成本。   本文以天嵌公司的TQ2440 ARM开发板为硬件平台,以linux2.6.30为操作系统内核,通过串口工具secure CRT,使用金士顿U盘作为USB存储设备,的分析并实现了linux下USB大容量存储设备驱动。   1.USB子系统   类似于linux scsi子系统,USB子系统也采用树形拓扑结构,层级关系因系统功能的不同而不同,拓扑模型如图1所示。系统作为主机时拓扑层级为:USB设备驱动、USB核心、USB主控制器驱动;作为从设备时层级为:Gadget驱动、Gadget API、USB设备控制器驱动。本文以linux为主机系统,U盘为从设备,因此只讨论主机侧拓扑结构。   USB设备驱动负责:向USB核心注册设备驱动、管理USB设备的探测与断开、实现与USB核心通信;USB核心提供一系列数据结构,宏定义和函数来抽象底层硬件设备,为设备驱动和主控器驱动提供特定的接口,读取并解析USB设备和配置描述符,为USB设备分配地址,转发设备驱动数据包,配置设备,维护设备链表和设备驱动链表,维护设备信息;USB主控制器驱动负责:与核心层通信、管理主控制器与设备的实际通信。   通常厂商提供主控制器驱动,而linux实现了USB核心(usb core)部分,因此本文将研究USB设备驱动。   2.USB协议   2.1 设备,配置,接口,端点   USB协议用设备(device)、配置(confi-guration)、接口(interface)、端点(endpoint)来描述设备的全部信息。每个设备有一个或多个配置(configuration),同一时刻只能有一个配置处于活跃状态;每个配置有一个或多个接口(interface);每个接口都有特定的设备驱动,例如USB音响有音量调节旋钮和扬声器,则对应于旋钮驱动和扬声器驱动;每个接口有零个或多个端点(endpoint),端点是通信的末端,数据传输以管道(pipe)的形式在端点上实现,管道具有单向传输性,因此通常要为设备分配多个管道,读设备时使用上行管道,写设备时使用下行管道。   2.2 传输方式   数据传输有四种方式:   控制(control)传输用于非周期性的可靠传输,如USB鼠标键盘等;中断(interrupt)传输用于速率稳定的数据传输;批量(bulk)传输用于大量数据传输,对数据传输时间要求不高,如U盘、硬盘、软盘等;等时(isochronous)传输用于实时数据传输,且对数据传输误码率要求不高,如摄像头、扬声器等。   根据传输方式的不同,端点分为控制端点、中断端点、批量端点、等时端点四种,端点0缺省为控制端点,其它端点需分配设置。管道分为控制管道、中断管道、批量管道、等时管道。   2.3 传输协议   根据存储介质的不同,USB大容量存储(Mass storage)设备通常分为两类:scsi设备和floppy设备。传输协议关系如图2所示,主机与scsi设备之间采用Bulk Only方式传输数据,设备内部采用scsi命令传输;主机与floppy设备之间采用CBI(control/bulk/interrupt)方式传输数据,设备内部采用UFI(universal floppy interface)协议传输。   3.接口   USB设备每个接口都有特定的设备驱动,设备驱动用接口描述符(interface descriptor)来描述设备接口属性及通信特征,代码清单如下:   struct usb_interface_descriptor {   接口描述符包含三个重要域bInterfa-ceClass、bInterfaceSubClass、b

文档评论(0)

bokegood + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档