(简易USB驱动)开发指导.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PAGE 9 实验七(2) 设备驱动开发指导 块设备种类多,使用广泛,其驱动程序的开发也比字符设备复杂。通过本实验,大家要开发一个实际块设备(U盘)的驱动程序,将能够更深入地掌握块设备驱动程序的开发方法。Linux下已经有一个通用的U盘驱动程序usb-storage.o,其源程序放在目录drivers\usb\storage下(相对于内核源码根目录)。但这个驱动的实现相当复杂,本实验希望开发一个相对简单些的U盘驱动程序,不求高性能,只求结构明朗、清晰易懂,主要是让大家掌握一个实际块设备的驱动方式,从而加深理解。 事实上,本实验开发的驱动程序应该能够适用于所有基于Bulkonly传输协议的USB大容量存储设备(USB Mass Storage),比如USB移动硬盘和USB外置光驱,USB闪存盘(U盘)只是其中的一种。由于USB大容量存储设备具有容量大、速度快、连接灵活、即插即用、总线供电等优点,它们得到了广泛使用,掌握这类设备驱动程序的开发技术无疑具有很强的实用性。 实验内容 编写一个U盘驱动程序myudisk,只要求能够驱动某个型号的U盘,能够支持U盘的常规操作,如命令hexdump、mke2fs和mount等。同时,要求在系统内核日志中显示出U盘的容量。若有余力,可增加多分区支持功能。 实验基础和思路 在教材中P130,讲解了如何编写一个Ramdisk块设备驱动程序(sbull.c),称为radimo;在文献《Linux Device Drivers》讲解了如何编写一个USB设备驱动程序,并以Linux源代码中的usb-skeleton.c为例。虽然前者驱动的并不是一个实际的块设备,且后者又只是针对usb字符设备,但是它们提供了一个不错的基础,通过合并我们就能基本得到一个支持usb块设备的驱动程序。之所以说基本得到,是因为合并后只是有了块设备、USB设备的驱动支持框架,但还缺一样:对U盘(USB块设备)的实际访问操作。USB块设备的访问方法与USB字符设备区别很大,有一套复杂的协议。把这样一套协议研究清楚,将花费大量时间,也远离了我们驱动程序开发的核心。这是一大难点,为此我们专门编写了一个U盘访问函数(myudisk_Bulk_transport),以减轻工作量。下一节将对该函数的使用方法和工作过程进行专门讲解。 简言之,合并radimo和usb-skeleton这两个参考驱动程序,以构造整体框架,调用帮助函数myudisk_Bulk_transport以访问U盘,从而打造一个简洁的U盘驱动程序。本节接下来介绍这两个参考驱动程序:radimo和usb-skeleton,着重讲解其工作原理及合并关键环节。 参考驱动程序一:块设备驱动程序sbull 请参看教材P130 参考驱动程序二:USB字符设备驱动程序usb_skeleton 请参看内核代码drivers\usb\usb-skeleton.c U盘驱动的帮助函数 为了帮助大家编写U盘驱动程序、降低复杂性,我们以Linux下的通用USB驱动程序usb-storage为基础,整理出了一个U盘访问函数myudisk_Bulk_transport。此函数主要借鉴的是如下几个文件: drivers/usb/storage/transport.c drivers/usb/storage/transport.h drivers/scsi/scsi.h 函数原型及其使用 该函数的原型如下所示: int myudisk_Bulk_transport(struct usb_device *udev, struct usb_interface *interface, struct cmnd_struct *cs, unsigned char *bulk_buffer, int bulk_size, __u8 bulk_in_endpointAddr, __u8 bulk_out_endpointAddr); 其功能是向USB设备udev的接口interface发送一个命令,进行对应的数据传递,并获取反馈的状态信息。各参数解释如下: udev和interface:U盘的设备和接口指针,可直接使用usb_skel中的对应变量。这里有必要澄清几个基本概念。USB协议规定,分四级来描述USB设备:一个USB设备(device)可能有很多配置(configuration);每种配置下又可表现出多个子设备,每个子设备用一个接口(interface)表示、真正对应于一个驱动程序;再细了讲,子设备与USB控制器之间是通过管道(pipe)

您可能关注的文档

文档评论(0)

159****8201 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档