欢迎来到天天文库
浏览记录
ID:23811311
大小:296.50 KB
页数:10页
时间:2018-11-10
《操作系统课程设计内容报告设计内容自己的驱动程序.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、江苏大学计算机学院课程设计报告江苏大学计算机学院课程设计报告课程名称设计自己的驱动程序实验学期2015至2016学年,第1学期学生姓名专业班级计算机1301学号指导教师毛启容开课系操作系统操作系统课程组制江苏大学计算机学院课程设计报告《操作系统》课程设计报告课程设计题目:设计自己的驱动程序设计时间:2016.01.05~2016.01.13一、课程设计目的与要求目的:编写一个模块化的字符设备驱动程序,手工加载到linux内核中,并用cp等命令或编写用户程序检测设备驱动程序。要求:1.编写一个简单的字符设备驱动程序,该字符设备包括打开、读、写、注册、注销与释放六个基
2、本操作。2.编写一个测试程序,测试字符设备驱动程序的正确性。3.要求在实验报告中列出Linux内核的版本与内核模块加载过程。4.设备的安装:需要将编写的设备驱动程序以模块的方式加载进内核。5.设备的实用:通过cp,dd等命令、输入输出重定向或者编写用户程序来测试所设计的驱动程序。6.使用C或者C++编程实现。二、课程设计内容设计和实现一个虚拟命名管道(FIFO)的字符设备。写一个模块化的字符设备驱动程序三、课程设计设备与环境Linux(虚拟机)环境四、设计正文1.系统分析江苏大学计算机学院课程设计报告系统调用是操作系统内核和应用程序之间的接口,设备驱动程序是操作系
3、统内核和机器硬件之间的接口。设备驱动程序为应用程序屏蔽了硬件的细节,这样在应用程序看来,硬件设备只是一个设备文件,应用程序可以象操作普通文件一样对硬件设备进行操作。设备驱动程序是内核的一部分,它完成以下的功能:l虚拟设备的注册与注销(指在内核的注册与注销);l虚拟设备的打开与释放;l虚拟设备的读写操作。字符设备提供给应用程序的是一个流控制接口,主要包括open()、release()、read()、write()。在系统中添加一个字符设备驱动程序,实际上就是给上述操作添加对应的代码。对于字符设备和块设备,Linux内核对这些操作进行了统一的抽象,把它们定义在结构体
4、file_operations中2.系统设计2.1模块设计字符设备驱动注销设备释放设备注册设备写操作读操作打开设备2.2数据结构说明字符设备驱动主要应用了三种数据结构:①file_operations结构:File_operations结构体中的成员函数是字符驱动设备的主体内容,这些函数实际会在应用程序进行linux的open()、release()、read()、write()等系统调用时最终被调用。②file结构,主要用于与文件系统对应的设备驱动程序。代表一个打开的文件,它由内核在open时创建,并传递给在该文件上进行操作的所有函数,直到碰到最后的close函
5、数。在文件的所有实例都被关闭之后,内核会释放这个数据结构;③inode结构,提供了关于特殊设备文件/dev/myDevice的信息。各个结构的定义如下:江苏大学计算机学院课程设计报告(1)file_operations结构:structfile_operationspStruct={open:my_open,release:my_release,read:my_read,write:my_write,};(2)file结构:读:staticssize_tmy_read(structfile*file,char__user*user,size_tt,loff_t*f
6、);写:staticssize_tmy_write(structfile*file,constchar__user*user,size_tt,loff_t*f);Seek文件定位:staticloff_tmy_llseek(structfile*filp,loff_toffset,intwhence)(3)inode结构:打开:staticintmy_open(structinode*inode,structfile*file);释放:staticintmy_release(structinode*inode,structfile*file);/*注册模块*/in
7、tinit_module(){intret;/*函数中第一个参数是告诉系统,新注册的设备的主设备号由系统分配,*第二个参数是新设备注册时的设备名字,*第三个参数是指向file_operations的指针,*当用设备号为0创建时,系统一个可以用的设备号创建模块*/ret=register_chrdev(0,devName,&pStruct);if(ret<0){江苏大学计算机学院课程设计报告printk("registfailure!");return-1;}else{printk("thedevicehasbeenregistered!");device_
8、num=r
此文档下载收益归作者所有