(简易usb驱动)开发指导

(简易usb驱动)开发指导

ID:33676325

大小:66.52 KB

页数:9页

时间:2019-02-28

(简易usb驱动)开发指导_第1页
(简易usb驱动)开发指导_第2页
(简易usb驱动)开发指导_第3页
(简易usb驱动)开发指导_第4页
(简易usb驱动)开发指导_第5页
资源描述:

《(简易usb驱动)开发指导》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、实验七(2)设备驱动开发指导块设备种类多,使用广泛,其驱动程序的开发也比字符设备复杂。通过本实验,大家要开发一个实际块设备(U盘)的驱动程序,将能够更深入地掌握块设备驱动程序的开发方法。Linux下已经有一个通用的U盘驱动程序usb-storage.o,其源程序放在目录driversusbstorageT*(相对于内核源码根目录)。但这个驱动的实现相当复杂,本实验希望开发一个相对简单些的U盘驱动程序,不求高性能,只求结构明朗、清晰易懂,主要是让大家掌握一个实际块设备的驱动方式,从而加深理解。事实上,本实验开发的驱动

2、程序应该能够适用于所有基于Bulkonly传输协议的USB大容量存储设备(USBMassStorage),比如USB移动硬盘和USB外置光驱,USB闪存盘(U盘)只是其中的一种。由于USB大容量存储设备具有容量大、速度快、连接灵活、即插即用、总线供电等优点,它们得到了广泛使用,掌握这类设备驱动程序的开发技术无疑具有很强的实用性。实验内容编写一个U盘驱动程序myudisk,只要求能够驱动某个型号的U盘,能够支持U盘的常规操作,如命令hexdump、mke2fs和mount等。同时,要求在系统内核日志屮显示出U盘的容量。若

3、有余力,可增加多分区支持功能。实验基础和思路在教材中P130,讲解了如何编写一个Ramdisk块设备驱动程序(sbull.c),称为radimo;在文献紅inuxDeviceDrivers》讲解了如何编写一个USB设备驱动程序,并以Linux源代码中的usb-skeleton.c为例。虽然前者驱动的并不是一个实际的块设备,且后者又只是针对usb字符设备,但是它们提供了一个不错的基础,通过合并我们就能基本得到一个支持usb块设备的驱动程序。之所以说基本得到,是因为合并后只是有了块设备、USB设备的驱动支持框架,但还缺一样

4、:对U盘(USB块设备)的实际访问操作。USB块设备的访问方法与USB字符设备区别很大,有一套复朵的协议。把这样一套协议研究清楚,将花费大量时间,也远离了我们驱动程序开发的核心。这是一大难点,为此我们专门编写了一个U盘访问函数(myudisk.Bulk^transport),以减轻工作量。下一节将对该函数的使用方法和工作过程进行专门讲解。简言之,合并radimo和usb-skeleton这两个参考驱动程序,以构造整体框架,调用帮助函数myudisk_Bulk_transport以访问U盘,从而打造一个简洁的U盘驱动程序

5、。本节接下来介绍这两个参考驱动程序:radimo和usb-skeleton,着重讲解其「.作原理及合并关键环节。参考驱动程序一:块设备驱动程序sbull请参看教材P130参考驱动程序二:USB字符设备驱动程序usb_skeleton请参看内核代码driversusbusb-skeleton.cU盘驱动的帮助函数为了帮助大家编写U盘驱动程序、降低复杂性,我们以LinuxF的通用USB驱动程序usb-storage为基础,整理岀了一个U盘访问函数myudiskBulktransporto此函数主要借鉴的是如下几个文件:

6、1)drivers/usb/storage/transport.c2)drivers/usb/storage/transport.h3)drivers/scsi/scsi.h函数原型及其使用该函数的原型如下所示:intmyudiskBulktransport(structusbdevice*udev,structusb_interface*interface,structcmnd_struct*cs,unsignedchar*bulk_buffcr,intbulk_size,u8bulkinendpointAddr,u

7、8bulkoutendpointAddr);其功能是向USB设备udev的接口interface发送一个命令,进行对应的数据传递,并获収反馈的状态信息。各参数解释如下:•udev和interface:U盘的设备和接口指针,可直接使用usb.skel中的对应变量。这里有必要澄清儿个基本概念。USB协议规定,分四级来描述USB设备:一个USB设备(device)可能有很多配置(configuration);每种配置下又可表现出多个子设备,每个子设备用一个接口(interface)表示、真正对应于一个驱动程序;再细了讲,子设

8、备与USB控制器之间是通过管道(pipe)进行的,而管道的两端称为端点(endpoint)。•cs:指向一个cmnd_struct结构,描述发给U盘的命令,这些命令在UF1命令规范(USBMassStorageClassUFICommandSpecification)中定义。UFI命令规范是针对USB移动存储而制定的,实际上UFT

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。