通用块层是块设备驱动的核心部分,这部分主要包含块设备驱动程序的通过代码部分。
这里写图片描述
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 *);

其他部分已在前文中讲到,这里不再累赘。

Logo

更多推荐