块设备驱动

块设备(Block Device)是指在操作系统中以固定大小的块为单位进行数据读写的设备。每个块的大小通常为512字节或更大,用于存储和传输数据。块设备可以是硬盘、固态硬盘(SSD)、光盘、闪存等存储设备

特点:

        固定大小的块:块设备以固定大小的块为单位进行读写操作

        有缓冲区:块设备通常具有内部缓冲区,数据会先缓存在内存中,然后批量传输到设备或从设备中读取。这样可以提高数据读写的效率,减少对设备的频繁访问

        支持随机访问:可以按照块的地址直接读写特定的数据块

        文件系统中的块设备:在操作系统中,块设备通常作为硬盘或其他存储设备的一部分存在。它们通过文件系统进行管理和访问。操作系统将块设备分成固定大小的块,并使用文件系统来组织和管理这些块

gendisk结构体在Linux内核中表示一个块设备,是块设备驱动程序和块设备层之间的接口数据结构

struct gendisk {
	int major;			            //块设备主设备号
	int first_minor;                //起始的从设备号,通常=0
	int minors;                     //从设备号数量,块设备分区数为minors-1,1=不分区
	char disk_name[DISK_NAME_LEN];	//块设备的名字

	unsigned short events;		    //支持的事件
	unsigned short event_flags;	    //异步事件

	struct disk_part_tbl __rcu *part_tbl; //块设备分区表首地址,用来串起各个hd_struct分区
	struct hd_struct part0;         //表示分区的结构体,此处part0记录了整个块设备的信息

	const struct block_device_operations *fops;     //块设备操作方法结构体
	struct request_queue *queue;    //请求队列的指针
	void *private_data;             //私有数据,为驱动程序传参

	int flags;                      //用来表示驱动器状态的标志
	unsigned long state;
#define GD_NEED_PART_SCAN		0
	struct rw_semaphore lookup_sem;
	struct kobject *slave_dir;      //表示gendisk的device实例的父设备
    
	struct timer_rand_state *random;
	atomic_t sync_io;		/* RAID */
	struct disk_events *ev;         //块设备事件结构体指针
#ifdef  CONFIG_BLK_DEV_INTEGRITY
	struct kobject integrity_kobj;
#endif	/* CONFIG_BLK_DEV_INTEGRITY */
#if IS_ENABLED(CONFIG_CDROM)
	struct cdrom_device_info *cdi;
#endif
	int node_id;                    //块设备关联的内存节点编号
	struct badblocks *bb;
	struct lockdep_map lockdep_map;
};

分区表disk_part_tbl结构体,用来串起各个hd_struct分区,定义在include/linux/genhd.h

struct disk_part_tbl {
	struct rcu_head rcu_head;
	int len;                              //分区结构体指针数组的项数
	struct hd_struct __rcu *last_lookup;  //上次查找的分区结构体
	struct hd_struct __rcu *part[];       //分区结构体指针数组
};

 hd_struct结构体表示块设备的某一个分区的信息,如磁盘容量等。定

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值