MAJOR、MINOR和MKDEV
源码
文件include/linux/kdev_t.h
#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))
分析
MAJOR(dev):将已知的dev号取高12位即为MAJOR
MINOR(dev):将已知的dev号取低20位即为MINOR
MKDEV(ma,mi):ma(major num),mi(minor num),将主设备号放在高12位,此设备号放在低20位,即组成了上面的dev号
总结
由以上可以看出MAJOR MINOR 是 MKDEV 的一个反向操作:前者已知dev,得到主、次设备号;后者已知主次设备号,得到dev号