200元7天入门UI设计
特色直播课
招生说明会-如何为孩子选择好学校好专业
设计小白也能学会海报“整容”术
测一测我到底适合学什么?跳槽转行学啥好?测一测就知道-北大青鸟嘉华学校官网
电脑
首页 >手机网站 > 新闻 > Linux设备驱动:如何写字...

Linux设备驱动:如何写字符设备驱动(1)

如何写Linux字符设备驱动?首先我们来分解一下字符设备驱动都有那些结构或者方法组成,也就是说实现一个可以使用的字符设备驱动我们必须做些什么工作。
1、主设备号和次设备号
对于字符设备的访问是通过文件系统中的设备名称进行的。他们通常位于/dev目录下。如下:
其中b代表块设备,c代表字符设备。对于普通文件来说,ls -l会列出文件的长度,而对于设备文件来说,上面的7,5,4等代表的是对应设备的主设备号,而后面的0,1,2,10等则是对应设备的次设备号。那么主设备号和次设备号分别代表什么意义呢?一般情况下,可以这样理解,主设备号标识设备对应的驱动程序,也就是说1个主设备号对应一个驱动程序。当然,现在也有多个驱动程序共享主设备号的情况。而次设备号有内核使用,用于确定/dev下的设备文件对应的具体设备。举一个例子,虚拟控制台和串口终端有驱动程序4管理,而不同的终端分别有不同的次设备号。
1.1、设备编号的表达
在内核中,dev_t用来保存设备编号,包括主设备号和次设备号。在2.6的内核版本种,dev_t是一个32位的数,其中12位用来表示主设备号,其余20位用来标识次设备号。
通过dev_t获取主设备号和次设备号使用下面的宏:
MAJOR(dev_t dev);
MINOR(dev_t dev);
相反,通过主设备号和次设备号转换为dev_t类型使用:
MKDEV(int major, int minor);
1.2、分配和释放设备编号
在构建一个字符设备之前,驱动程序首先要获得一个或者多个设备编号,这类似一个营业执照,有了营业执照才在内核中正常工作营业。完成此工作的函数是:
int register_chrdev_region(dev_t first, unsigned int count, const char *name);
first是要分配的设备编号范围的起始值。count是连续设备的编号的个数。name是和该设备编号范围关联的设备名称,他将出现在/proc/devices和sysfs中。此函数成功返回0,失败返回负的错误码。此函数是在已知主设备号的情况下使用,在未知主设备号的情况下,我们使用下面的函数:
int alloc_chrdev_region(dev_t *dev, unsigned int firstminor, unsigned int count, const char* name);
dev用于输出申请到的设备编号,firstminor要使用的第一个此设备编号。
在不使用时需要释放这些设备编号,已提供其他设备程序使用:
void unregister_chrdev_region(dev_t dev, unsigned int count);
此函数多在模块的清除函数中调用。
分配到设备编号之后,我们只是拿到了营业执照,虽说现在已经准备的差不多了,但是我们只是从内核中申请到了设备号,应用程序还是不能对此设备作任何事情,我们需要一个简单的函数来把设备编号和此设备能实现的功能连接起来,这样我们的模块才能提供具体的功能.这个操作很简单,稍后就会提到,下一篇我们再来介绍几个重要的数据结构。
2016-03-04 16:29:46
相关热词搜索:

其他资讯

你知道吗,从2018年初到目前为止,勒索病毒已经对超过200万台终...
2018-11-07
面对2014年就业季,企业对IT人才需求越来越大,不仅在数量有更高...
2014-04-01
自互联网发展以来,WiFi使用频率越来越高,这也引出了公共场所无...
2016-05-09
马上就是元宵节,在这个团圆的日子之前,北大青鸟深圳嘉华学校的...
2016-02-23
据官方统计,2018年全国报名参加高考的考生突破1000万大关,这意...
2018-05-22
北大青鸟深圳嘉华学校毗邻深圳高新技术产业园、深圳大学、劳动大...
2017-11-30
申请嘉华免费学习机会
姓名:
电话:
我适合学IT技术吗?测一测揭晓答案
2021不知道学什么好?
北大青鸟职业规划老师免费规划学习方案
姓名 电话
说明:您的信息通过加密传输,请放心填写,提交后请保持手机通畅,我们将在24小时内与您联系。