- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
广州大学学生实验报告开课学院及实验室:计算机科学与工程实验室 2018 年 6月 16日学院计算机科学与教育软件学院年级/专业/班网工152班姓名学号实验课程名称Linux操作系统分析实验成绩实验项目名称实验五 设备驱动: Linux系统下的字符设备驱动程序编程指导老师陶文正一、实验目的通过一个简单的设备驱动的实现过程。学会Linux中设备驱动程序的编写二、使用仪器、器材1.设备:带网卡的PC若干、交换机一台。2.工具:网线若干,已经安装好Red Hat Linux 9.0系统的PC一台。三、实验内容及原理设计和实现一个虚拟命名管道(FIFO)的字符设备。写一个模块化的字符设备驱动程序四、实验过程设备的实现数据结构/*vfifo.c*/#ifndef __KERNEL__ #define __KERNEL__ #endif #ifndef MODULE #define MODULE #endif#define __NO_VERSION__ #includelinux/config.h #includelinux/module.h #includelinux/kernel.h #includelinux/malloc.h #includelinux/fs.h #includelinux/proc_fs.h #includelinux/errno.h #includelinux/types.h #includelinux/fcntl.h #includelinux/init.h #includeasm/system.h #includeasm/uaccess.h #ifndef VFIFO_MAJOR #define VFIFO_MAJOR 241 #endif #ifndef VFIFO_NR_DEVS #define VFIFO_NR_DEVS 4 #endif #ifndef VFIFO_BUFFER #define VFIFO_BUFFER 4000 #endif #includelinux/devfs_fs_kernel.h devfs_handle_t vfifo_devfs_dir; struct file_operations vfifo_fops; int vfifo_major=VFIFO_MAJOR; int vfifo_nr_devs=VFIFO_NR_DEVS; int vfifo_buffer=VFIFO_BUFFER; MODULE_PARM(vfifo_major,i); MODULE_PARM(vfifo_nr_devs,i); MODULE_PARM(vfifo_buffer,i); MODULE_AUTHOR(EBUDDY);结构体/*vfifo.c*/typedef struct Vfifo_Dev{ wait_queue_head rdq,wrq; char* base; unsigned int buffersize; unsigned int len; unsigned int start; unsigned int readers,writers; struct semaphore sem; devfs_handle_t r_handle,w_handle; }Vfifo_Dev;设备操作接口注册与注销/*vfifo.c*/char vfifoname[8]; static int __init vfifo_init_module(void) { int result,i; SET_MODULE_OWNER(vfifo_fops); #ifdef CONFIG_DEVFS_FS vfifo_devfs_dir=devfs_mk_dir(NULL,vfifo,NULL); if(!vfifo_devfs_dir) return -EBUSY; #endif result=devfs_register_chrdev(vfifo_major,vfifo,vfifo_fops); if(result0){ printk(KERN_WARNING vfifo: cant get major %d\n,vfifo_major); return result; } if(vfifo_major==0) vfifo_major=result; vfifo_devices = kmalloc(vfifo_nr_devs*sizeof(Vfifo_Dev),GFP_KERNEL); if(!vfifo_devices){ return -ENOMEM; } memset(vfifo_devices,0,vf
您可能关注的文档
- Mech-Intro-L05-Static静力学分析.ppt
- PEP六年级下册U3-课程教学设计.doc
- pep人教版小学英语毕业语法复习总结课件.ppt
- R语言作业-教学课件.docx
- qq单克隆抗体.ppt
- 单片机课件第1章-绪论.ppt
- 单位食堂厨师工作考核.docx
- 单位消防安全管理检查.docx
- 刀具主要几何角度和选择.doc
- 道德和法治七下期末复习提纲.doc
- 第18讲 第17课 西晋的短暂统一和北方各族的内迁.docx
- 第15讲 第14课 沟通中外文明的“丝绸之路”.docx
- 第13课时 中东 欧洲西部.doc
- 第17讲 第16 课三国鼎立.docx
- 第17讲 第16课 三国鼎立 带解析.docx
- 2024_2025年新教材高中历史课时检测9近代西方的法律与教化含解析新人教版选择性必修1.doc
- 2024_2025学年高二数学下学期期末备考试卷文含解析.docx
- 山西版2024高考政治一轮复习第二单元生产劳动与经营第5课时企业与劳动者教案.docx
- 第16讲 第15课 两汉的科技和文化 带解析.docx
- 第13课 宋元时期的科技与中外交通.docx
文档评论(0)