首页 > 其他 > 详细

内核MKDEV(MAJOR, MINOR)

时间:2019-11-17 22:22:16      阅读:160      评论:0      收藏:0      [点我收藏+]

版本:linux-2.6.24.4

宏:

MKDEV(MAJOR, MINOR);??

说明: 获取设备在设备表中的位置。

MAJOR???主设备号

MINOR???次设备号

? ?

内核使用的版本号说明文件:

????在内核 /Documentation 目录下的 devices.txt 有说明。

????一般本地保留的

????????MAJOR

234-239 UNASSIGNED

240-254 char LOCAL/EXPERIMENTAL USE

240-254 block LOCAL/EXPERIMENTAL USE??

????????MINOR

1 250 (次设备号的 0 不能使用)

??? ?

静态的设备文件建立:

????mknod /dev/gpio_led c 240 1

? ?

? ?

下面这段话出自linux内核linux/kdev.h中,是关于主次设备号操作的一些宏

? ?

1 #ifndef _LINUX_KDEV_T_H
2 #define _LINUX_KDEV_T_H
3
4 #ifdef __KERNEL__
5 #define MINORBITS????????????????20
6 #define MINORMASK????????????????((1U << MINORBITS) - 1)
7
8 #define MAJOR(dev)????????????????((unsigned int) ((dev) >> MINORBITS))
9 #define MINOR(dev)????????????????((unsigned int) ((dev) & MINORMASK))
10 #define MKDEV(ma,mi)???????? (((ma) << MINORBITS) | (mi))

? ?

对上面的这个宏要理解的话先得理解下面这段话先得理解1u<<(port)的含义:

1u<<(port)可以理解为取一个无符号数,其大小为1,并且将其左移port位。

例如:port=3,则其等同于:1<<3;

? ?

在理解了以上的含义以后,可以发现:

(1U << MINORBITS) 的结果是: 0000 0000 0001 0000 0000 0000 0000 0000

? ?

((1U << MINORBITS) - 1)的结果是:0000 0000 0000 1111 1111 1111 1111 1111

? ?

那么进一步分析可以知道:

MAJOR(dev)得到的是dev的高12位;

MINOR(dev)得到的是dev的低20位;

? ?

MKDEV(ma,mi) 就是先将主设备号左移20位,然后与次设备号相加得到设备号

内核MKDEV(MAJOR, MINOR)

原文:https://www.cnblogs.com/lilto/p/11878288.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!