Linux内核中,用gendisk结构体表示一个磁盘设备或分区,块设备驱动程序的设计主要就是围绕gendisk这个数据结构展开的。一个简单的块设备驱动程序框架如下:
- 在init函数中分配、设置、添加一个gendisk;
- 设计gendisk结构体fops成员包含的操作函数;
- 设计gendisk结构体queue(请求队列)成员的请求处理函数。
gendisk结构的定义:
struct gendisk {
int major; /* major number of driver */
int first_minor;
int minors; /* maximum number of minors, =1 for
* disks that can't be partitioned. */
char disk_name[32]; /* name of major driver */
struct hd_struct **part; /* [indexed by minor] */
int part_uevent_suppress;
struct block_device_operations *fops;
struct request_queue *queue;
void *private_data;
sector_t capacity;
int flags;
struct device *driverfs_dev;
struct kobject kobj;
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 *dksta