设备管理Linux设备驱动程序安装_第1页
设备管理Linux设备驱动程序安装_第2页
设备管理Linux设备驱动程序安装_第3页
设备管理Linux设备驱动程序安装_第4页
设备管理Linux设备驱动程序安装_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、集美大学计算机工程学院实验报告课程名称:操作系统班级:xxx实验成绩:指导教师: 姓名:xxx实验项目名称:设备管理Linux设备驱动程序安装学号:xxxx上机实践日期:xxx实验项目编号:组号:上机实践时间: 2 学时一、 目的(本次实验所涉及并要求掌握的知识点)1. 认识Linux的设备的种类和设备工作方式;2. 理解设备驱动程序的工作原理;3. 掌握设备驱动程序的编写规范,能编写并安装简单的设备驱动程序。 二、 实验内容与设计思想(设计思路、主要数据结构、主要代码结构、主要代码段分析、电路图)实验内容:在Linux系统中,编写一个简单的字符型设备驱动程序模块,设备具有独占特性,可执行读和

2、写操作,相关系统调用为open, close, read, write,open和close分别相当于请求和释放设备,read和write内容保存在设备模块内的缓冲区中。设备模块可动态注册和卸载,并建立与之对应的特殊文件/dev/mydev。实验设计:1.按照要求编写设备驱动模块,同时编写一个测试程序2.分别对其编译,注意编译时的项3.设备模块加载4.创建特殊文件5.分析执行结果6.设备模块卸载 三、实验使用环境(本次实验所使用的平台和相关软件)Linux四、实验步骤和调试过程(实验步骤、测试数据设计、测试结果分析)/mydev.c #ifndef _KERNEL_#define _KERNE

3、L_#endif#ifndef MODULE#define MODULE#endif#define _NO_VERSION_#include #include #include #include #if CONFIG_MODVERSIONS = 1#define MODVERSIONS#include #endif#include #include #include #include #ifndef KERNEL_VERSION#define KERNEL_VERSION(a,b,c) (a)*65536+(b)*256+(c)#endif/* Conditional compilation.

4、 LINUX_VERSION_CODE is * the code (as per KERNEL_VERSION) of this version.*/#if LINUX_VERSION_CODE KERNEL_VERSION(2,2,0)#include /* for put_user */#endif#define SUCCESS 0#define DEVICE_NAME kueng_char_dev#define BUF_LEN 50static int Device_Open =0;static char MessageBUF_LEN;static int Major;static i

5、nt mydev_open(struct inode *inode,struct file *file) if(Device_Open) return -EBUSY; Device_Open=1; MOD_INC_USE_COUNT; / 模块使用者数加,非0不能卸载return 0;static int mydev_release(struct inode *inode,struct file *file) Device_Open=0;MOD_DEC_USE_COUNT; / 模块使用者数减 return 0;static ssize_t mydev_read(struct file *fi

6、le,char *buffer, size_t length ,loff_t *f_pos) int bytes_read=0; /确认访问用户内存空间合法性 if(verify_area(VERIFY_WRITE,buffer,length)=-EFAULT) return -EFAULT; /由用户空间到系统空间复制 bytes_read=copy_to_user(buffer,Message,length); return bytes_read; static ssize_t mydev_write(struct file *file, const char *buffer,size_t

7、 length,loff_t *f_pos) int len = BUF_LENlength?BUF_LEN:length; /确认访问用户内存空间合法性 if(verify_area(VERIFY_READ,buffer,length)=-EFAULT) return EFAULT; /由用户空间到系统空间复制 copy_from_user(Message,buffer,len); return length;struct file_operations Fops = release: mydev_release, open: mydev_open, read: mydev_read, wr

8、ite: mydev_write;int init_module(void) /设备注册 Major = register_chrdev(0,DEVICE_NAME,&Fops);if(Major0) printk(Registering character device failed with %dn,Major); return Major; printk(Registration success with Major device number %dn,Major); return 0;void cleanup_module(void) int ret; /设备注销 ret = unre

9、gister_chrdev(Major,DEVICE_NAME); if(ret0) printk(Error in unregister_chrdev: %dn,ret);MODULE_LICENSE(GPL);MODULE_AUTHOR(KUENG); /test.c #include #include #include #include #include main() int testdev; int i ; char buf50= pear to dev!; printf(program test is running!n); testdev = open(/dev/mydev,O_RDWR); if(testdev=-1) printf(cant open file n); exit(0); /向设备写入pear to dev! write(testdev,buf,50); printf(write %sn,buf,50); /更改buf内容为apple to dev!strcpy(buf,apple t

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论