嵌入式操作系统课程设计new

嵌入式操作系统课程设计new

ID:20405243

大小:103.50 KB

页数:8页

时间:2018-10-13

嵌入式操作系统课程设计new_第1页
嵌入式操作系统课程设计new_第2页
嵌入式操作系统课程设计new_第3页
嵌入式操作系统课程设计new_第4页
嵌入式操作系统课程设计new_第5页
资源描述:

《嵌入式操作系统课程设计new》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、《嵌入式操作系统》课程设计报告一、设计题目linux设备驱动程序设计二、设计目的认识linux设备的种类和设备工作方式,理解设备驱动程序的工作原理,掌握设备驱动程序的编写规范,能编写并安装简单的设备驱动程序。三、设计内容与要求在linux系统中,编写一个简单的字符设备型驱动程序模块,设备具有独占特性,可执行读和写操作,相关系统调用为open,close,read,write。Open和close分别相当于请求和释放设备,read和write将内容保存在设备模块内的缓冲区中。设备模块可动态注册和卸载,并建立与之对应的特殊文件/dev/my.

2、dev。四、设计思想说明(包括设计思路、设计原理、数据结构、程序流程图、关键代码说明)本程序是一个Linux下的简单字符设备驱动。首先定义了一个用来存放字符的结构体mycdev。以后的各种操作都是针对mycdev这个结构体进行。其定义在mycdev.h头文件中。定义如下:#ifndef_mycdev_h#define_mycdev_h#endif#include#include#defineDATASIZE1024structmycdev{void*data;/*数据指针*/unsigne

3、dlongsize;/*数据大小*/unsignedlongcata;/*容量*/structcdevcdev;/*字符结构体*/semaphoresem;/*锁*/};/*结构体分配函数*/void*malloc_mydev(){void*mdev;if(!mdev=kmalloc(sizeof(structmydev),GFP_KERNEL)){printk(KERN_WARNING"kmallocstructerror");return-EFAULT;}returnmdev;}/*初始化结构体,包括指针,大小,容量,锁*/intin

4、it_mycdev(structmycdev*mdev){mdev->data=null;size=0;cata=DATASIZE;sema_init(&sem,1);return0;}/*释放数据*/voidrelease_data(structmycdev*mdev){down_interruptible(&sem);size=0;kfree(mdev->data);up(&sem);}/*分配数据空间*/intmalloc_data(structmycdev*mdev){if(!mdev->data=kmalloc(mdev->ca

5、ta,GFP_KERNEL)){printk(KERN_WARNING"kmallocdataerror");return-EFAULT;}size=DATASIZE;return0;}/*释放结构体*/voidrelease_mycdev(structmycdev*mdev){kfree(mdev);}然后就可以编写主程序mydev.c了。1、首先在init_func是设备入口函数。里面进行了分配设备号,分配字符设备,初始化,绑定数据结构等操作。if(!dev_major){my_dev=&MEDEV(dev_major,DEV_MIN

6、OR);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_MODUL

7、S;cdev_add(&my_cdev[i]->cdev,my_dev[i],1);初始化mycdev结构体,初始化其中的字符设备结构体,然后绑定到设备号。2、再就是主要的设备函数file_operations的定义。structfile_operationsmy_fop={.owner=THIS_MODULE,.llseek=llseek_func,.read=read_func,.write=write_func,.open=open_func,.release=release_func,};3、最后还有推出函数exit_func。c

8、dev_del(&my_cdev->cdev);release_mycdev(my_cdev[i]);unregister(my_dev,DEV_COUNT);一、程序清单:注意加注释(包含关

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。