下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 三年级上册科学教科版课件第1课 水到哪里去了
- 《plc应用实例》课件
- 委托技术开发合同(2篇)
- 存量房屋买卖合同(2篇)
- 2021年山东省济南市公开招聘警务辅助人员(辅警)笔试摸底测试(3)卷含答案
- 2024年四川省泸州市公开招聘警务辅助人员(辅警)笔试经典练习卷(B)含答案
- 2021年山东省济南市公开招聘警务辅助人员(辅警)笔试经典练习卷(B)含答案
- 2024年广东省江门市公开招聘警务辅助人员(辅警)笔试模拟自测题(B)卷含答案
- 2022年浙江省金华市公开招聘警务辅助人员(辅警)笔试专项训练卷(1)含答案
- 2024年度特种设备抵押融资合同示范2篇
- 国开电大《人文英语3》一平台机考总题库珍藏版
- 《建筑基坑工程监测技术标准》(50497-2019)
- 《思想道德与法治》试题库
- 高铁接触网案例 更换平腕臂绝缘子
- 2023年Cable开发工程师年度总结及下年规划
- 人教版数学小学二年级上册无纸笔测试题
- 机场行李自动处理系统建模与仿真研究的开题报告
- 产品合格证出厂合格证A4打印模板
- 护理中断事件(演示文稿)
- 地基与基础工程试题及参考答案
- 新能源汽车专业毕业论文
评论
0/150
提交评论