- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
嵌入式操作系统程设计
《嵌入式操作系统》课程设计报告
设计题目
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
您可能关注的文档
- 地铁建设对郑州展的影响有多少.doc
- 地铁施工建设中风险管理的有效措施.doc
- 地铁盾构建设十主要施工风险.doc
- 地铁论文,摘.doc
- 地铁经济对城市售商业布局的影响研究.doc
- 地铁项目建设工投资管理.doc
- 地铁车站及周边上.doc
- 地铁是怎样建成.doc
- 坚持“教学是立之本,科研是强建设特色鲜明的教学研究型综合性师范大学校之路”的基本思路.doc
- 坦克世界各系坦特点.doc
- 专题7.1 期中检测综合压轴题分类专题(考点梳理与题型分类讲解)(人教版)(学生版).docx
- 高中会考数学试卷真题及答案2025.doc
- 2022年9月时政题库(含答案).pdf
- 专题7.1 期中模拟测试卷(压轴题综合测试卷)(人教版2024)(教师版).docx
- 专题7.1 期中模拟测试卷(压轴题综合测试卷)(人教版2024)(学生版).docx
- 2022年初级护师基础知识测试200题(含答案).pdf
- 人工智能与传媒教育融合发展模式探索.pdf
- Unit 1 School life 第1课时 Welcome to our school(教学评教学设计)英语冀教版三起四年级上册2025.pdf
- 高中的英语试卷及答案.doc
- 笔尖上的故事.docx
最近下载
- 19-4WREE6V32-22G24K31F1V-比例阀 最详细说明书.pdf
- 2024—2025学年上海市宝山区六年级(五四学制)上学期期中语文试卷.doc VIP
- 核医学科工程项目管理重点与难点.pptx
- 2025吉林长春市总工会公招聘工会社会工作者(107人)招聘笔试备考题库及答案解析.docx VIP
- 非煤矿山岗位安全操作作业规程全套.doc VIP
- (正式版)DB61∕T 1486.8-2021 《设施茄果类蔬菜水肥一体化技术规范 第8部分:辣椒基质栽培》.docx VIP
- (正式版)DB61∕T 1486.8-2021 《设施茄果类蔬菜水肥一体化技术规范 第8部分:辣椒基质栽培》.pdf VIP
- 《光伏玻璃工艺讲解》课件.ppt VIP
- 迅达扶梯9300ae产品介绍.pdf VIP
- SL747-2016采矿业建设项目水资源论证导则.pdf VIP
原创力文档


文档评论(0)