红联Linux门户
Linux帮助

linux处理设备号需要注意的问题

发布时间:2015-09-13 15:53:00来源:linux网站作者:子子午

<linux/kdev_t.h>文件提供了处理设备号相关的宏:

MKDEV(major, minor) 得到设备的dev_t值

MAJOR(dev_t) 得到主设备号

MINOR(dev_t) 得到次设备号


需要注意的是这三个宏在在内核和用户态有不同的解释,下面截取kdev_t.h的相关片段(系统为64位Redhat5.4)


#ifndef _LINUX_KDEV_T_H
#define _LINUX_KDEV_T_H
#ifdef __KERNEL__
#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))

//...........................................

#else /* __KERNEL__ */

/*
Some programs want their definitions of MAJOR and MINOR and MKDEV
from the kernel sources. These must be the externally visible ones.
*/
#define MAJOR(dev) ((dev)>>8)
#define MINOR(dev) ((dev) & 0xff)
#define MKDEV(ma,mi) ((ma)<<8 | (mi))
#endif /* __KERNEL__ */
#endif


可以看到如果定义了__KERNEL__宏,主设备号将要偏移20位,否则只偏移8位。这个在使用的时候需要注意。


Linux不挂载设备,获取设备的文件系统信息:http://www.linuxdiyf.com/linux/14116.html

Linux中硬件设备的表示:http://www.linuxdiyf.com/linux/8157.html