⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kdev_t.h

📁 linux得一些常用命令,以及linux环境下的c编程
💻 H
字号:
#ifndef _LINUX_KDEV_T_H#define _LINUX_KDEV_T_H#if defined(__KERNEL__) || defined(_LVM_H_INCLUDE)/*As a preparation for the introduction of larger device numbers,we introduce a type kdev_t to hold them. No information aboutthis type is known outside of this include file.Objects of type kdev_t designate a device. Outside of the kernelthe corresponding things are objects of type dev_t - usually anintegral type with the device major and minor in the high and lowbits, respectively. Conversion is done byextern kdev_t to_kdev_t(int);It is up to the various file systems to decide how objects of typedev_t are stored on disk.The only other point of contact between kernel and outside worldare the system calls stat and mknod, new versions of which willeventually have to be used in libc.[Unfortunately, the floppy control ioctls fail to hide the internalkernel structures, and the fd_device field of a struct floppy_drive_structis user-visible. So, it remains a dev_t for the moment, with some uglyconversions in floppy.c.]Inside the kernel, we aim for a kdev_t type that is a pointerto a structure with information about the device (like major,minor, size, blocksize, sectorsize, name, read-only flag,struct file_operations etc.).However, for the time being we let kdev_t be almost the same as dev_t:typedef struct { unsigned short major, minor; } kdev_t;Admissible operations on an object of type kdev_t:- passing it along- comparing it for equality with another such object- storing it in ROOT_DEV, inode->i_dev, inode->i_rdev, sb->s_dev,  bh->b_dev, req->rq_dev, de->dc_dev, tty->device- using its bit pattern as argument in a hash function- finding its major and minor- complaining about itAn object of type kdev_t is created only by the function MKDEV(),with the single exception of the constant 0 (no device).Right now the other information mentioned above is usually foundin static arrays indexed by major or major,minor.An obstacle to immediately using    typedef struct { ... (* lots of information *) } *kdev_tis the case of mknod used to create a block device that thekernel doesn't know about at present (but first learns aboutwhen some module is inserted).aeb - 950811*//* Since MINOR(dev) is used as index in static arrays,   the kernel is not quite ready yet for larger minors.   However, everything runs fine with an arbitrary kdev_t type. */#define MINORBITS	8#define MINORMASK	((1U << MINORBITS) - 1)typedef unsigned short kdev_t;#define MAJOR(dev)	((unsigned int) ((dev) >> MINORBITS))#define MINOR(dev)	((unsigned int) ((dev) & MINORMASK))#define HASHDEV(dev)	((unsigned int) (dev))#define NODEV		0#define MKDEV(ma,mi)	(((ma) << MINORBITS) | (mi))#define B_FREE		0xffff		/* yuk */extern const char * kdevname(kdev_t);	/* note: returns pointer to static data! *//* 2.5.x compatibility */#define mk_kdev(a,b)	MKDEV(a,b)#define major(d)	MAJOR(d)#define minor(d)	MINOR(d)#define kdev_same(a,b)	((a) == (b))#define kdev_none(d)	(!(d))#define kdev_val(d)	((unsigned int)(d))#define val_to_kdev(d)	((kdev_t)(d))/*As long as device numbers in the outside world have 16 bits only,we use these conversions.*/static inline unsigned int kdev_t_to_nr(kdev_t dev) {	return (MAJOR(dev)<<8) | MINOR(dev);}static inline kdev_t to_kdev_t(int dev){	int major, minor;#if 0	major = (dev >> 16);	if (!major) {		major = (dev >> 8);		minor = (dev & 0xff);	} else		minor = (dev & 0xffff);#else	major = (dev >> 8);	minor = (dev & 0xff);#endif	return MKDEV(major, minor);}#else /* __KERNEL__ || _LVM_H_INCLUDE *//*Some programs want their definitions of MAJOR and MINOR and MKDEVfrom 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__ || _LVM_H_INCLUDE */#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -