Linux塊裝置驅動(五)————通用塊層
阿新 • • 發佈:2019-01-09
通用塊層是塊裝置驅動的核心部分,這部分主要包含塊裝置驅動程式的通過程式碼部分。
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 *);
其他部分已在前文中講到,這裡不再累贅。