设备分为三大类:字符设备,块设备和网络设备。内核针对每一类设备都提供了对应驱动模型架构,包括基本的内核设施和文件系统接口。
字符设备:在传送过程中以字符为单位,一个字linux中设备驱动的分类
从上图可以看到linux系统将各异的设备分为三大类:字符设备,块设备和网络设备。内核针对每一类设备都提供了对应驱动模型架构,包括基本的内核设施和文件系统接口。
字符设备:在传送过程中以字符为单位,一个字节一个字节的读写,不能随机的读写数据,因为这类设备读写速度比较缓慢(因而其内核设施中不提供缓存机制),常见的字符设备有键盘,鼠标已打印机设备等。
块设备:是指可以从任意位置读取数据的设备,对这种设备读写是按块为单位读写的。它使用缓存区来暂存数据,等待条件成熟后,会一并将数据写入到设备或者从设备一次性读出到缓冲区。比较u盘,磁盘,sd卡等。
网络设备:网络设备不同于字符设备和块设备,它是面向报文的。同时在/dev目录下没有设备节点这样一说,在应用层是用户是通过api的socket函数来使用网络设备的。比如网卡等。
设备号的构成
● 主设备号与次设备号
关于设备号,我们先通过如下的图来了解一下
从上图可以看出,c代表的是字符设备,d代码的是块设备。
对于红色区域来说,1是主设备号,11是次设备号。
对于绿色区域来说,7是主设备号,0-7代表是次设备号。
主设备号用来标识对于的设备驱动程序,而次设备号则由驱动程序使用,用来标识它所管理的若干同类设备。
●设备号的表示
在linux系统中,设备号用dev_t表示。这是个32位的无符号整数。
在内核中,dev_t的低20位用来表示次设备号,高12位用来表示主设备号。随着linux系统的演变,上述的主次设备号的分发可能在将来会发生变化,所以设备驱动程序开发者应该避免直接使用主次设备号所占的位宽来获得对于的主设备号或次设备号。为了保证以后主次设备号所占的位数发生变化之后,驱动程序依然可以正常工作,内核提供了如下了几个宏来操作设备号。
其中major宏用来从一个dev_t类型的设备号中提取出主设备号,minor宏从来从一个dev_t类型的设备号中提取出此设备号。mkdev则是将主设备号ma和次设备号mi合成一个dev_t类型的设备号。
假设在内核版本之后对主次设备号所占的位数发生了变化,minorbits修改为18位,只要驱动是使用major和minor宏来操作设备号,就不需要修改驱动代码也可以在新内核中使用。
设备号的分配
在内核源码中,设备号的分配主要有两个函数:
●静态分配设备号
该函数是用来在知道主设备号的前提下使用,第一个参数form表示一个设备号,第二个参数count表示次设备的个数,也就是当前驱动程序所管理的同类设备的个数,第三个参数name表示设备或者驱动的名称。成功返回0,失败返回负数。
比如内核代码中使用register_chrdev_region申请设备号示例:
以上代码申请了主设备号为13,总共存在1024个次设备,设备的名字为input。
●动态分配设备号
该函数有系统动态的分配设备号,是在主设备号不知情的情况下,让系统给分配设备号。第一个参数dev表示是输出参数,也就是设备号,第二个参数baseminor表示第一个次设备号编号,第三个参数count表示次设备号的个数,第四个参数name也就是设备或者驱动的名称。
内核中使用alloc_chrdev_region的示例:
上述示例代码是通过alloc_chrdev_region函数申请设备号,设备的个数为16个,设备的名称为rtc设备。
设备号释放
在驱动程序不使用的时候需要释放设备号,因为设备号也是系统的资源,不用的使用需要及时释放资源。已供其他设备使用。
使用该函数可以使用申请的设备号,第一个参数from表示要释放的设备号,第二个参数count表示要释放的个数。
内核使用unregister_chrdev_region的示例:
从上面代码可知,如果调用unregister_chrdev_region就会从系统中释放主设备号13的设备。
如何降低开关电源输出纹波与噪声?
中国移动4G用户数当月净减242.7万
宁德时代与吉利汽车的动力电池合资公司落户宜宾
10月新能源汽车产量分析
苹果模组供应商高伟港股停牌 或将被收购
基于Linux的设备号的构成、分配、释放的详细解析
三星电子公布2019年第一季度财报 业绩同比略有下降
支持SPI通讯|高集成度的直流有刷栅极驱动IC TMI8721-Q1
电话机器人常见的六大问题解答
国内DPU市场2025年将达到 565.9亿元
如何用小安派玩小霸王游戏
欧司朗光电半导体正在推动UV-C LED的产业化
移柯通信携带全系列的IOT连接产品亮相MWC
SGS:国际首个电池行业EPD平台发布产品类别规则(PCR)
华为P40 Pro保护壳曝光,模仿Mate系列保时捷设计
崇达技术拟收购普诺威35%股权 布局存储类封装载板业务
LPWA能使用较低功耗实现远距离的无线信号传输
“中国芯”要想发展,最后靠的还是人才
成都市发改委发布2019年成都市重点项目名单 紫光集团旗下两大项目入列
小米电视4什么时候发布?超薄的机身、超强的音响系统,小米电视4值得期待