欢迎来到天天文库
浏览记录
ID:55582018
大小:538.00 KB
页数:11页
时间:2020-05-18
《中南大学操作系统设备驱动程序设计实验报告.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、.中南大学操作系统课程设计实验报告选题:设备驱动程序设计Word文档.一、概述:设计主要完成的任务和解决的主要问题;1.任务:设备驱动程序设计,要求如下:(1)设计WindowsXP或者Linux操作系统下的设备驱动程序;(2)设备类型可以是字符设备、块设备或者网络设备;(3)设备可以是虚拟的也可以是实际设备;(4)编写测试应用程序,测试对该设备的读写等操作.2.解决的主要问题:(1)各个相关函数的重写(2)虚拟字符设备的挂载(3)虚拟字符设备的测试二.设计的基本概念和原理;1.基本概念(1)Linux
2、系统设备概述Linux核心与设备驱动之间有一个以标准方式进行互操作的接口。每一类设备(字符设备、块设备以及网络设备)都提供了通用接口,以便在需要时为核提供服务。这种通用接口使得核可以以相同的方式来对待不同的设备以及设备驱动。设备驱动程序只是处理硬件,将如何使用硬件的问题留给应用程序。可以从不同的角度来看待设备驱动程序:它是位于应用层和实际设备之间的软件。设备驱动程序在Linux核中扮演着特殊的角色,它们是一个个独立的“黑盒子”,使某个特定的硬件响应一个定义良好的部编程接口,同时完全隐藏了设备的工作细节。
3、用户操作通过一组标准化的调用完成,而这些调用是和特定的驱动程序无关的。将这些调用映射到作用于实际硬件的设备特定的操作上,则是设备驱动程序的任务。针对不同的设备驱动程序分为3类:字符设备驱动、块设备驱动、网络设备驱动。(2)字符设备可以像文件一样访问字符设备,字符设备驱动程序负责实现这些行为。这样的驱程序通常实现open、close、read和write系统调用。通过文件系统节点可以访问字符设备,例如/dev/tty1和/dev/lp1。在字符设备和普通文件系统间的唯一区别是:普通文件允许在其上来回读写,
4、而大多数字符设备仅仅是数据通道,只能顺序读写。当然,也存在这样的字符设备,看起来像个数据区,可以来回读取其中的数据。(3)设备驱动程序设备驱动程序就是一组由核中的相关子例程和数据组成的IO设备软件接口。每当核意识到要对某个设备进行特殊的操作时,它就调用相应的驱动例程。这就使得控制从用户进程转移到了驱动例程,当驱动例程完成后又被返回至用户进程。(4)模块化Word文档.Linux中的可加载模块(module)是Linux核支持的动态可加载模块,他们是核心的一部分(通常是设备驱动程序),单是并没编译到核心
5、里面去。Module可以单独编译成为目标代码,module是个目标文件。它可以根据需要在系统启动后动态地加载到系统核心之中。当module不再被需要时,可以动态地卸载出系统核心。在Linux多数设备驱动程序或文件系统都是作为module的。超级用户可以通过insmod和rmmod命令显示地将module载入核心或者卸载。2.原理系统调用是操作系统核、应用程序之间的接口,设备驱动程序是操作系统核、机器硬件之间的接口。设备为应用程序屏蔽了硬件的细节,这样从应用程序看来,硬件设备只是一个设备文件,应用程序可以
6、像操作普通文件一样对硬件设备进行操作。设备驱动程序是核的一部分,它完成以下的功能:(1)对设备初始化和释放(2)把数据从核传送到硬件和从硬件读取数据(3)读取应用程序传送给设备文件的数据和回送应用程序请求的数据(4)检测和处理设备出现的错误另外,为了让驱动程序能够正常的工作,操作系统核为驱动程序提供一系列的支持,这些支持包括许多方面。例如,驱动程序需要向核申请使用系统存,驱动程序需要向核申请使用系统硬件资源,驱动程序需要向核注册自己。下面是核提供的可供驱动程序使用的几个重要的函数。(1)存分配函数kma
7、lloc(2)I/O端口相关函数request_region、release_region、check_region等(3)核打印函数printk此外操作系统将每个外部设备当做文件来处理,核通过file_operations结构来访问driver的功能。File_operations的定义在文件中。每个字符设备都有一个file_operations结构。这个结构指向一组操作函数(open、read...)。每个函数的定义由driver提供。当然,有些标准操作某些设备并不支持,这时
8、,file_operations结构中对应的表项为NULL。随着Linux核的不断升级,file_operations结构也不断变大。在最新的版本中,函数原型也发生了一些变化。当然,新版本总会向下兼容。这个结构每一个成员的名字都对应着一个系统调用。用户进程利用系统调用在对设备文件进行诸如read/write操作,系统调用通过设备文件的主设备号找到相应的设备驱动程序,然后读取这个数据结构相应的函数指针,接着把控制权交给该函数。这是Linux的
此文档下载收益归作者所有