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位。这个在使用的时候需要注意。
作者:ziziwu 发表于2011-10-19 15:04:39 原文链接
阅读:10 评论:0 查看评论