网站大量收购独家精品文档,联系QQ:2885784924

《嵌入式操作系统》课程设计报告.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《嵌入式操作系统》课程设计报告 设计题目 linux设备驱动程序设计 设计目的 认识linux设备的种类和设备工作方式,理解设备驱动程序的工作原理,掌握设备驱动程序的编写规范,能编写并安装简单的设备驱动程序。 设计内容与要求 在linux系统中,编写一个简单的字符设备型驱动程序模块,设备具有独占特性,可执行读和写操作,相关系统调用为open,close,read,write。Open和close分别相当于请求和释放设备,read和write将内容保存在设备模块内的缓冲区中。设备模块可动态注册和卸载,并建立与之对应的特殊文件/dev/my.dev。 设计思想说明(包括设计思路、设计原理、数据结构、程序流程图、关键代码说明) 本程序是一个Linux下的简单字符设备驱动。首先定义了一个用来存放字符的结构体mycdev。以后的各种操作都是针对mycdev这个结构体进行。其定义在mycdev.h头文件中。定义如下: #ifndef _mycdev_h #define _mycdev_h #endif #includecdev.h #includeasm/semaphore.h #define DATASIZE 1024 struct mycdev { void *data ; /*数据指针*/ unsigned long size ; /*数据大小*/ unsigned long cata ; /*容量*/ struct cdev cdev ; /*字符结构体*/ semaphore sem ; /*锁*/ }; /*结构体分配函数*/ void * malloc_mydev() { void *mdev ; if(!mdev = kmalloc(sizeof(struct mydev) , GFP_KERNEL)) { printk(KERN_WARNING kmalloc struct error); return - EFAULT; } return mdev ; } /*初始化结构体,包括指针,大小,容量 , 锁*/ int init_mycdev(struct mycdev *mdev ) { mdev-data = null ; size = 0 ; cata = DATASIZE ; sema_init(sem , 1) ; return 0 ; } /*释放数据*/ void release_data(struct mycdev *mdev) { down_interruptible(sem) ; size = 0 ; kfree(mdev-data); up(sem); } /*分配数据空间*/ int malloc_data(struct mycdev *mdev) { if(!mdev-data = kmalloc(mdev-cata , GFP_KERNEL)) { printk(KERN_WARNING kmalloc data error); return - EFAULT; } size = DATASIZE ; return 0 ; } /*释放结构体*/ void release_mycdev(struct mycdev *mdev) { kfree(mdev); } 然后就可以编写主程序mydev.c了。 1、首先在init_func是设备入口函数。里面进行了分配设备号,分配字符设备,初始化,绑定数据结构等操作。 if(!dev_major){ my_dev = MEDEV(dev_major , DEV_MINOR) ; register_chrdev_region(my_dev , DEV_COUNT , my_dev) ;} else{ alloc_chrdev_region(my_dev , 0 , DEV_COUNT , my_dev)) dev_major = MAJOR(my_dev) ;} 这是对设备号分配的选择,如果dev_major即设备号未0,就动态定义,否则静态分配。 init_mycdev(my_cdev[i]); cdev_init(my_cdev[i]-cdev ,my_fop) ; my_cdev[i]-cdev.owner=THIS_MODULS ; cdev_add(my_cdev[i]-cdev ,my_dev[i] , 1 ) ; 初始化mycdev结构体,初始化其中的字符设备结构体,然后绑定到设备号。 2、再就是主要的设备函数file_operations的定义。 struct file_operations my_fop ={ .ow

文档评论(0)

豆豆文库 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档