免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
.集美大学计算机工程学院实验报告课程名称:操作系统班级:xxx实验成绩:指导教师: 姓名:xxx实验项目名称:设备管理Linux设备驱动程序安装学号:xxxx上机实践日期:xxx实验项目编号:组号:上机实践时间: 2 学时一、 目的(本次实验所涉及并要求掌握的知识点)1. 认识Linux的设备的种类和设备工作方式;2. 理解设备驱动程序的工作原理;3. 掌握设备驱动程序的编写规范,能编写并安装简单的设备驱动程序。 二、 实验内容与设计思想(设计思路、主要数据结构、主要代码结构、主要代码段分析、电路图)实验内容:在Linux系统中,编写一个简单的字符型设备驱动程序模块,设备具有独占特性,可执行读和写操作,相关系统调用为open, close, read, write,open和close分别相当于请求和释放设备,read和write内容保存在设备模块内的缓冲区中。设备模块可动态注册和卸载,并建立与之对应的特殊文件/dev/mydev。实验设计:1.按照要求编写设备驱动模块,同时编写一个测试程序2.分别对其编译,注意编译时的项3.设备模块加载4.创建特殊文件5.分析执行结果6.设备模块卸载 三、实验使用环境(本次实验所使用的平台和相关软件)Linux四、实验步骤和调试过程(实验步骤、测试数据设计、测试结果分析)/mydev.c #ifndef _KERNEL_#define _KERNEL_#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. 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 int 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 *file,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 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, write: 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 = unregister_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 to de
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 分窗口展示课件
- 妇产科课程制作课件
- 房产客服投诉处理课件
- 9-10-EpOME-9-10-Epoxyoctadecenoic-acid-生命科学试剂-MCE
- 粉尘防爆专题培训课件
- 2026-2027学年初中心理健康七年级下册北京版第二节 寻求心理帮助课时检测卷
- 2026-2031年中国政府引导基金行业市场调查研究与投资前景分析报告
- 2026年河南省普通高中高三秋期9月联考数学试卷含答案
- 腹部疼痛护理课件
- 受检工程建设单位检查表
- 【案例】某集团IT运维智能体(AIOps Agent)自主故障诊断与自愈平台详细设计方案
- 水电站远程运维管理方案
- MicroLED光互联专题报告:重构近场算力通信范式兼顾距离和能耗和可靠
- 2026年法院聘用制书记员招聘笔试职业能力测试仿真题
- 骨性关节炎教学课件
- 军用关键软硬件自主可控产品名录(2025年v1版)
- 医院权力运行监督制度
- 中小企业数字化营销实施手册
- 2026年建筑行业绿色材料应用知识测试
- 引导骨再生技术修复牙槽骨缺损的专家共 识
- 张炳厚学术思想、临床经验及其地龟汤类方治疗慢性肾脏病的深度探究
评论
0/150
提交评论