设备驱动程序设计小结

设备驱动程序设计小结

ID:15777907

大小:265.25 KB

页数:12页

时间:2018-08-05

设备驱动程序设计小结_第1页
设备驱动程序设计小结_第2页
设备驱动程序设计小结_第3页
设备驱动程序设计小结_第4页
设备驱动程序设计小结_第5页
资源描述:

《设备驱动程序设计小结》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、作者sola设备驱动程序的设计主要需要2步来完成1.分配主设备号动态分配(重点)或者静态分配2.创建设备文件手动创建和自动创建3.设备注册添加及注销i.分配cdevii.初始化cdeviii.添加cdeviv.设备注销4.设备操作的实现(即相关方法的实现)预备知识:首先着重介绍3个非常重要的结构体StructFile结构体代表一个打开的设备文件,系统中每个打开的文件在内核中都有一个与之关联的structfile,例如当我调用linux库函数ssize_tread(intfd,void*buf,size_tcount);时它实际上是调用了内核中的ssize_tvfs_read(s

2、tructfile*file,char__user*buf,size_tcount,loff_t*pos)函数,内核会传给他一个参数即Structfile*file,然后通过此结构的f_op成员调用相关的函数,也就是说我们执行read函数实际上是调用了f_op中指定的函数,见下图,这是内核中的一段代码:你一定会疑问f_op是什么,这个f_op类型就是我一会将说到的第二个结构体Structfile_operation当然structfile结构体的成员相当多,但是其中有4个是常用的,第一个刚才已经提到了conststructfile_operations   *f_op; //一

3、会将讲到,这里你只需知道这个成员中装有多种函数指针unsignedint      f_flags;  //该成员是文件标志。 void         *private_data;//该成员是系统调用时保存状态信息非常有用的资源。你可以暂时将其当做一块可用存放数据的指针loff_t         f_pos;//这个是文件的读写位置,我们用的lseek函数其实就是影响到内核中的它来改变文件中的位置structfile_operations结构这个结构师一个函数指针的集合,定义了能在设备上进行的操作,到这里你应该明白我们系统调用的函数实质上就是间接调用这个结构中指定的函数主要

4、成员有这些Structfile_operationsmem_fops={.owner=THIS_MODULE,.llseek=mem_seek;.read=mem_read,.write=mem_write,.ioctl=mem_ioctl,.open=mem_open,.release=mem_release,};各个成员由名字就可看出他应该对用的函数了Structinode结构体它记录了文件的物理信息,简单的说,每个存储设备或存储设备的分区被格式化成文件系统后都会对应两部分,一部分为inode,另一部分为Block,block用来存储数据,而inode则记录了这些被存储的数

5、据的属性(包括文件大小,归属的用户组,读写权限,设备号。。。)这里我们注重关心的成员就是dev_ti_rdev设备号(马上就讲到设备号)然后我们讲一下和为设备号我们都知道在linux下每一个设备都对应一个文件,对文件的操作就可以控制设备,那么设备文件是如何与字符设备建立联系的那,答案就是通过设备号设备号是一个32位的长整型,高12位对应主设备号,低20位对用次设备号也就是说在linux下你可以安装2的12次方个不同的设备和2的20次方个同类型的设备分类:主设备号:用来反映设备类型从设备号:用来区分在同一主设备号下的不同文件设备号相关操作:如何创建设备号?答:通过MKDEV(主设

6、备号,次设备号)内核如何描述设备号?答:通过dev_t刚才我们在structinode中已经见过如何从dev_t中分解出主设备号?答:通过宏MAJOR(dev_tdev)如何从dev_t中分解出次设备号MINOR(dev_tdev)好了,预备知识碎片已经凑齐,让我来学习一下驱动程序的设计的简单方法第一步分配主设备号有两种分配方法:方法一.静态分配首先静态分配的实质就是自己找一个没有被系统使用的设备号来注册系统的设备号都存放在内核目录下的Documention/devices.txt文件中,你需要从中找一个没有被使用的设备号其次使用register_chrdec_region函数

7、来注册这个设备号Intregister_chrdev_region(dev_tfrom,unsignedCount,constchar*name)Form为你希望申请的设备号,也就是你找的没有被使用的设备号Count在这个设备号下你希望使用多少个设备Name:设备名(它将被体现在/proc/devices中)静态分配的缺点:因为你的主设备号时随机选定的,一旦驱动被广泛使用,可能会导致设备号冲突,而使驱动程序无法注册方法二.动态分配由系统为你分配主设备号首先调用函数Intalloc_chrde

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

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

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