广州大学Linux-实验五.docx

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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

文档评论(0)

js1180 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档