1. 程式人生 > >Linux塊裝置驅動(五)————通用塊層

Linux塊裝置驅動(五)————通用塊層

通用塊層是塊裝置驅動的核心部分,這部分主要包含塊裝置驅動程式的通過程式碼部分。
這裡寫圖片描述
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 *);

其他部分已在前文中講到,這裡不再累贅。