struct gendisk { int major; //主设备号
int first_minor; //第一个从设备号
int minors; /* 描述被磁盘使用的设备号的成员.一个驱动器必须使用最少一个次编号.如果你的驱动会是可分区的,但是(并且大部分应当是),你要分配一个次编号给每个可能 的分区.次编号的一个普通的值是 16, 它允许"全磁盘"设备盒 15 个分区. 一些磁盘驱动使用 64 个次编号给每个设备.*/
char disk_name[32]; //应当被设置为磁盘驱动器名子的成员. 它出现在 /proc/partitions 和 sysfs.
struct hd_struct **part; /* [indexed by minor] */ struct block_device_operations *fops;// 设备操作集合.
struct request_queue *queue;//被内核用来管理这个设备的 I/O 请求的结构;
void *private_data;//块驱动可使用这个成员作为一个指向它们自己内部数据的指针.
sector_t capacity; //这个驱动器的容量,以512-字节扇区来计.sector_t类型可以是64位宽.驱动不应当直接设置这个成员;相反,传递扇区数目给set_capacity.
int flags; // 一套标志(很少使用),描述驱动器的状态.如果你的设备有可移出的介质,你应当设置GENHD_FL_REMOVABLE.CD-ROM驱动器可设置 GENHD_FL_CD. 如果, 由于某些原因, 你不需要分区信息出现在 /proc/partitions, 设置 GENHD_FL_SUPPRESS_PARTITIONS_INFO.
struct device *driverfs_dev; // FIXME: remove
struct device dev; struct kobject *holder_dir; struct kobject *slave_dir; struct timer_rand_state *random; int policy; atomic_t sync_io; /* RAID */ unsigned long stamp; int in_flight; #ifdef CONFIG_SMP struct disk_stats *dkstats; #else struct disk_stats dkstats; #endif struct work_struct async_notify; };
|