linux系统中块设备的基本实现方法
创始人
2024-05-04 20:09:56
0

      大家好,今天主要和大家聊一聊,如何使用linux系统中的块设备的实现方法。

目录

第一:块设备基本简介

第二:块设备驱动框架

第三:实现程序代码实现

第一:块设备基本简介

       块设备驱动与字符设备驱动之间的主要区别:

       1、块设备只能以块为单位进行读写访问,块是 linux 虚拟文件系统(VFS)基本的数据传输 单位。字符设备是以字节为单位进行数据传输的,不需要缓冲。

       2、块设备在结构上是可以进行随机访问的,对于这些设备的读写都是按块进行的,块设 备使用缓冲区来暂时存放数据,等到条件成熟以后再一次性将缓冲区中的数据写入块设备中。 这么做的目的为了提高块设备寿命,大家如果仔细观察的话就会发现有些硬盘或者 NAND Flash 就会标明擦除次数(flash 的特性,写之前要先擦除),比如擦除 100000 次等。因此,为了提高块 设备寿命引入了缓冲区,数据先写入到缓冲区中,等满足一定条件后再一次性写入到真正的物 理存储设备中,这样就减少了对块设备的擦除次数,提高了块设备寿命。

第二:块设备驱动框架

       linux内核使用block_device表示块设备,block_device为一个结构体。

struct  block_device{dev_t bd_dev;int bd_openers;struct gendisk  *bd_disk;};//bd_disk 成员变量,此成员变量为gendisk 结构体指针类型。内核使用 block_device 来表示一个具体的块设备对象,比如一个硬盘或者分区,如果是硬盘的话 bd_disk 就指向通用磁盘结构 gendisk。

第三:实现程序代码实现

#include //ramdisk设备结构体
struct ramdisk_dev{int major;     //主设备号unsigned char *ramdiskbuf;   //用于模拟块设备struct gendisk *gendisk;     //gendiskstruct request_queue *queue;   //请求队列
};/*    驱动的入口函数
*     参数:无
*/    胡工static int __init  ramdisk_init(void)
{//申请用于ramdisk内存ramdisk.ramdiskbuf = kzalloc(RAMDISK_SIZE,GFP_KERNEL);//初始化自旋锁spin_lock_init(&ramdisk.lock);//注册块设备ramdisk.major = register_blkdev(0, RAMDISK_NAME); /* 自动分配 *///分配并初始化gendiskramdisk.gendisk = alloc_disk(RADMISK_MINOR);//分配并初始化请求队列ramdisk.queue = blk_init_queue(ramdisk_request_fn,&ramdisk.lock);
}

      使用 mkfs.vfat 命令格式化/dev/ramdisk,将其格式化成 vfat 格式,输入如下命令: mkfs.vfat /dev/ramdisk

      格式化完成以后就可以挂载/dev/ramdisk 来访问了,挂载点可以自定义,这里笔者就将其挂 载到/tmp 目录下,输入如下命令: mount /dev/ramdisk /tmp 挂载成功以后就可以通过/tmp 来访问 ramdisk 这个磁盘了,进入到/tmp 目录中,可以通过 vi 命令新建一个 txt 文件来测试磁盘访问是否正常。

总结:驱动加载成功以后会在/dev/目录下生成一个名字为“ramdisk”的设备  ,可以输入一下命令ramdisk磁盘信息: fdisk  -l

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
苏州离哪个飞机场近(苏州离哪个... 本篇文章极速百科小编给大家谈谈苏州离哪个飞机场近,以及苏州离哪个飞机场近点对应的知识点,希望对各位有...