linux设备号的作用是什么_linux期末知识点整理

linux设备号的作用是什么_linux期末知识点整理文章目录一、设备号概念1.1设备号1.2设备号类型1.3主设备号、次设备号二、设备号、主设备号、次设备号操作宏三、设备号原型四、参考设备号源代码,撰写位操作宏代码4.1示例:获取一个数值的低8位一、设备号概念1.1设


一、设备号概念

1.1 设备号

Linux中,所有的设备都有自己的【名字(字符串)】和【代表该设备的一个数字序号】,计算机是通过该数字序号来识别是哪个设备,这个数字序号叫做:设备号

备注:输入命令“cat /proc/devices”可以查看当前已经被使用掉的设备号

1.2 设备号类型

设备号数据类型为:dev_t,原型是一个32位无符号整形类型(unsigned int )。

定义位置在:include/linux/types.h

1.3 主设备号 、次设备号

设备号数据类型:dev_t原型是一个32位无符号整形类型的值(unsigned int ),其中高12位表示主设备号,低20位表示次设备号,如下图。

备注:因为主设备号总共占12bit,所以范围为0 ~ 2^12,即:0~4095

在这里插入图片描述


二、设备号、主设备号、次设备号操作宏

在内核源码中主次设备号获取可以使用如下三个宏来获取以及合成:

设备号、主设备号、次设备号操作宏

合成设备号:MKDEV(ma,mi)       /* 已经知道主设备号ma和次设备号mi,使用该宏可以合成为完成的设备号 */
主设备号:MAJOR(xxx.devid)
次设备号:MINOR(xxx.devid)


三、设备号原型

Linux内核中主设备号、次设备号宏定义源代码如下:

#define MINORBITS 20
#define MINORMASK ((1U << MINORBITS) - 1)

#define MAJOR(dev) ((unsigned int) ((dev) >> MINORBITS))
#define MINOR(dev) ((unsigned int) ((dev) & MINORMASK)) 
#define MKDEV(ma,mi) (((ma) << MINORBITS) | (mi))


四、参考设备号源代码,撰写位操作宏代码

4.1 示例:获取一个数值的低8位

一个数值data,如何获取低8位,并获取剩余的高位?

代码:

#define LOW_BITS 8
#define HIGH_BITS_MASK ((1U << LOW_BITS) - 1) //此处1U表示无符号整形1,右移8位再减1以后会变成.... 0000 1111 1111

#define GET_HIGH_BITS(data) ((int)((data) >> LOW_BITS)) //注意:获取高位,直接将低位全部右移出去即可,所以此处右移宏为LOW_BITS
#define GET_LOW_BITS(data) ((int)((data) & HIGH_BITS_MASK))

今天的文章linux设备号的作用是什么_linux期末知识点整理分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/86374.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注