字符设备驱动程序学习笔记v0.1

字符设备驱动程序学习笔记v0.1

ID:17040958

大小:24.78 KB

页数:7页

时间:2018-08-27

字符设备驱动程序学习笔记v0.1_第1页
字符设备驱动程序学习笔记v0.1_第2页
字符设备驱动程序学习笔记v0.1_第3页
字符设备驱动程序学习笔记v0.1_第4页
字符设备驱动程序学习笔记v0.1_第5页
资源描述:

《字符设备驱动程序学习笔记v0.1》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、要创建一个字符设备,首先要在内核中注册目录注册设备2一.分配和释放设备编号2二.动态分配主设备编号2三.Helloworld编程3四.字符型设备驱动程序编写举例4引子4代码原文4代码分析6五.知识点滴6forthequalityofreviewsandreview.Article26threview(a)theCCRAcompliance,whethercopiesofchecks;(B)whetherdoubleinvestigation;(C)submissionofprogramcompliance,investigationorexaminationofwhetherv

2、iewsareclear;(D)theborrower,guarantorloans注册设备一.分配和释放设备编号包括主设备号和次设备号,在内核中,用dev_t(一个32位的数,即四个字节,也可一描述位int类型,其中的12位表示主设备号,其余20位表示此设备号)来保存完成该工作的必要函数是register_chrdev_region(dev_tfirst,unsignedintcount,char*name),很显然,该函数是系统函数,内核中已经定义了的。但是里面的参数,可以人为给出,比如第一个参数dev_t,此参数是要申请的设备编号(包括主设备号和次设备号)。Count是所

3、请求的连续设备编号的个数,name是和该编号范围关联的设备名称,注册成功之后,它将出现在/proc/devices/和sysfs中。如果我们提前明确知道所需要的设备编号,即first的值,则注册函数register_chrdev_region会工作的很好,但是,我们经常不知道设备将要使用哪些主设备号,因此,linux内核将努力实现设备编号的动态分配。在运行过程中使用下面的函数,内核将会为我们恰当的分配所需要的主设备编号:intalloc_chrdev_region(dev_t*dev,unsignedintfirstminor,unsignedintcount,char*nam

4、e)在这个函数中,dev是仅用于输出的参数(即该函数的返回值,返回所申请的设备编号),在成功完成调用后将保存已分配范围的第一个编号。firstminor是要使用的被请求的第一个次设备号,它通常是0。count和name参数与设备注册函数register_chrdev_region函数是一样的。综上,社情设备编号函数是:intalloc_chrdev_region(dev_t*dev,unsignedintfirstminor,unsignedintcount,char*name)设备编号释放需要使用下面的函数:voidunregister_chrdev_region(dev_t

5、first,unsignedintcount);上面的函数为驱动程序分配了设备编号,但是它们并没有告诉内核关于拿来这些编号要做什么工作。在用户空间程序可访问上述设备编号之前,驱动程序需要将设备编号和内部函数连接起来,这些内部函数用来实现设备的操作。在讨论如何实现这种连接之前,还要进一步讨论有关设备编号的内容。二.动态分配主设备编号在一个新设备向内核申请设备编号时,在驱动程序代码中,用来获取主设备号的代码:if(scull_major)//scull_major是名为scull的新设备的主设备号,默认值为0{dev=MKDEV(scull_major,scull_minor);r

6、esult=register_chrdev_region(dev,scull_nr_devs,“scull”);}elseforthequalityofreviewsandreview.Article26threview(a)theCCRAcompliance,whethercopiesofchecks;(B)whetherdoubleinvestigation;(C)submissionofprogramcompliance,investigationorexaminationofwhetherviewsareclear;(D)theborrower,guarantorloa

7、ns{result=alloc_chrdev_region(&dev,scull_minor,scull_nr_devs,“scull”);scull_major=MAJOR(dev);}if(result<0){printk(KERN_WARNING“scull:can’tgetmajor%d”,scull_major);returnresult;}intMAJOR(dev_tdev);intMINOR(dev_tdev);这两个宏从设备编号中抽取出主/次设备号。dev_tMKDEV(

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

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

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