Linux块设备驱动(五)————通用块层
通用块层是块设备驱动的核心部分,这部分主要包含块设备驱动程序的通过代码部分。1、通用块层通用块层是一个内核组件,他处理来自系统其他组件发出的块设备请求。换句话说,通用块层包含了块设备操作的一些通用函数和数据结构,如通用磁盘结构gendisk,前文介绍的请求队列结构request_queue、请求结构request、块设备I/O操作结构bio和块设备操作结构block_dev
·
通用块层是块设备驱动的核心部分,这部分主要包含块设备驱动程序的通过代码部分。
1、通用块层
通用块层是一个内核组件,他处理来自系统其他组件发出的块设备请求。换句话说,通用块层包含了块设备操作的一些通用函数和数据结构,如通用磁盘结构gendisk,前文介绍的请求队列结构request_queue、请求结构request、块设备I/O操作结构bio和块设备操作结构block_device_operations等。
2、通用磁盘结构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 *dkstats;
#else
struct disk_stats dkstats;
#endif
struct work_struct async_notify;
};
gendisk操作函数
struct gendisk *alloc_disk(int minors);
void add_disk(struct gendisk *disk);
void del_gendisk(struct gendisk *gp);
void put_disk(struct gendisk *disk);
int register_blkdev(unsigned int, const char *);
int unregister_blkdev(unsigned int, const char *);
其他部分已在前文中讲到,这里不再累赘。
更多推荐
已为社区贡献9条内容
所有评论(0)