“操作系统”实验教学之U盘驱动程序开发.docVIP

“操作系统”实验教学之U盘驱动程序开发.doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
“操作系统”实验教学之U盘驱动程序开发   摘要:本文介绍了一个U盘驱动程序开发实验的设计与实施情况,包括实验内容、实验基本过程和思路、实验组织和效果等。本实验有助于学生更真实地了解设备管理的实际情况,加深对设备管理原理的理解。   关键词:设备驱动程序;U盘;设备管理   中图分类号:G642 文献标识码:B      1引言      设备管理是操作系统的一个关键内容,在实际操作系统的开发中,有相当多的代码是各类设备的驱动程序。因此,在操作系统实践环节中设计一个合适的设备驱动程序开发实验具有非常重要的意义。   本文介绍了一个Linux环境下的U盘驱动程序开发实验的设计与实施情况。U盘是一个典型的块设备,这类设备种类多、使用广泛,其驱动程序的开发也比字符设备复杂。为了降低复杂性,许多相关的实验安排都是针对一个虚拟设备,如内存盘(RAM disk)。但这样做也有它的弊端,即与真实物理设备的驱动程序开发差异很大,学生不能更真实地了解设备管理的实际情况。因此,如果能够设计一个真实块设备(如U盘)的驱动程序开发实验,将能够弥补上述缺憾。   在Linux环境下,已经有一个通用的U盘驱动程序usb-storage.ko,其源程序放在目录drivers\usb\storage下(相对于内核源码根目录)。但这个驱动的实现相当复杂,它将一个USB设备模拟成了一个SCSI设备,进而通过SCSI设备的接口来访问,该驱动程序很难被学生所理解。在我们设计的实验中,希望学生开发一个相对简单些的U盘驱动程序,不求高性能,只求结构明朗、清晰易懂,主要是让学生掌握一个实际块设备的驱动方式,从而加深对设备管理原理的理解。   事实上,本实验开发的驱动程序应该能够适用于所有基于Bulkonly传输协议的USB大容量存储设备(USB Mass Storage),比如USB移动硬盘和USB外置光驱,U盘只是其中的一种。由于USB大容量存储设备具有容量大、速度快、连接灵活、即插即用、总线供电等优点,它们得到了广泛使用,掌握这类设备驱动程序的开发技术无疑具有很强的实用性。   本文第二节介绍此实验的内容设计情况,包括实验过程和思路的描述,第三节介绍实验的组织情况和实验效果分   析,最后是小结。      2实验内容设计      本实验要求学生在Linux操作系统下编写一个U盘驱动程序,只要求能够驱动某个型号的U盘,要能够支持U盘的常规操作,如命令hexdump、mke2fs和mount等。同时,要求在系统内核日志中显示出U盘的容量。对于学有余力的学生,可增加多分区支持功能。   2.1实验基础和思路   在文献[2]中,讲解了如何编写一个Ramdisk块设备驱动程序,称为sbull;也讲解了如何编写一个USB设备驱动程序,并以Linux源代码中的usb-skeleton.c为例。虽然前者驱动的并不是一个实际的块设备,且后者又只是针对USB字符设备,但是它们提供了一个不错的基础,通过合并就能基本得到一个支持USB块设备的驱动程序。之所以说基本得到,是因为合并后只是有了块设备、USB设备的驱动支持框架,但还缺一样:对U盘(USB块设备)的实际访问操作。   USB块设备的访问方法与USB字符设备区别很大,有一套复杂的协议。把这样一套协议研究清楚,将花费大量时间,也远离了驱动程序开发的核心。这是一大难点,为此我们专门编写了一个U盘访问函数(my_Bulk_ transport),以减轻工作量。2.3节将进一步介绍该帮助函数。   简言之,本实验的思路是:合并sbull和usb-skeleton这两个参考驱动程序,以构造出U盘驱动程序的整体框架;调用帮助函数my_Bulk_transport以实际访问U盘。从而开发出一个简洁的U盘驱动程序。下面分别对参考驱动程序和帮助函数分别进行简要介绍。   2.2参考驱动程序   文献[2]第16章以一个Ramdisk设备为例讲解了块设备驱动程序的一般编写方法。包括用到的主要数据结构(如下图所示)和关键函数(如register_blkdev、add_disk和blk_init_queue等)。从中可以知道如何向操作系统登记一个块设备、以及操作系统是如何调用所提供的相关函数来支持块设备的打开、关闭、读写、控制等操作的。这些是块设备驱动程序编写的基础知识。尤其需要说明的是,该驱动程序针对的并不是一个真实物理设备,而是一个Ramdisk设备。所谓Ramdisk,是指使用计算机内存作为存储介质的盘。一旦加载该驱动,就会从内存中划分出一些空间,虚拟出几个磁盘,并且可以对这个虚拟磁盘进行格式化、文件复制和查看等操作。因此,这个驱动程序只是提供了块设备驱动程序的一般框架。如果要驱动实际的U盘,还需要给学

文档评论(0)

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

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

版权声明书
用户编号:5243141323000000

1亿VIP精品文档

相关文档