块设备

《驱动学习 - 块设备驱动之框架详细分析》

故事扮演 提交于 2019-12-01 12:34:34
1.之前我们学的都是字符设备驱动, 先来回忆一下 字符设备驱动:   当我们的应用层读写(read()/write())字符设备驱动时,是按字节/字符来读写数据的,期间没有任何缓存区,因为数据量小,不能随机读取数据,例如:按键、LED、鼠标、键盘等 2.块设备驱动 块设备:   块设备是i/o设备中的一类, 当我们的应用层对该设备读写时,是按扇区大小来读写数据的,若读写的数据小于扇区的大小,就会需要缓存区, 可以随机读写设备的任意位置处的数据,例如 普通文件(*.txt,*.c等),硬盘,U盘,SD卡, 来源: https://www.cnblogs.com/zhuangquan/p/11685875.html

xen块设备体系结构(5)

不想你离开。 提交于 2019-12-01 12:09:54
blktap 又回到那个问题,I/O请求从前端到后端blkback之后,如何从blkback到大tapdisk2进程? pvops/Drivers/Xen/Blktap/ 下面是blktap的驱动代码,其中blktap的设备结构如下: struct blktap { int minor; unsigned long dev_inuse; struct blktap_ring ring; struct blktap_device device; struct blktap_page_pool *pool; wait_queue_head_t remove_wait; struct work_struct remove_work; char name[BLKTAP2_MAX_MESSAGE_LEN]; struct blktap_statistics stats; }; 根据目前的理解,blktap包含了四个模块:blktap_device, blktap_ring, blktap_sysfs, blktap_control static struct blktap_page_pool *default_pool 定义了blktap驱动和tapdisk2(??)进程的消息交换的内存页空间?? (个人推测,待求证) blktap_page_pool_init 为slab

ceph的数据存储之路(9) -----object的attr和omap操作

烈酒焚心 提交于 2019-12-01 10:38:50
这里有一个 ceph 的原则,就是所有存储的不管是块设备、对象存储、文件存储最后都转化成了底层的对象 object ,这个 object 包含 3 个元素 data , xattr , omap 。 data 是保存对象的数据, xattr 是保存对象的扩展属性,每个对象文件都可以设置文件的属性,这个属性是一个 key/value 值对,但是受到文件系统的限制, key/value 对的个数和每个 value 的大小都进行了限制。如果要设置的对象的 key/value 不能存储在文件的扩展属性中,还存在另外一种方式保存 omap , omap 实际上是保存到了 key/vaule 值对的数据库 levelDB 中,在这里 value 的值限制要比 xattr 中好的多。 一开始不太明白 key/value 是做什么的?在 ceph 中起到什么作用? 这里要说明的是这些 key/value 是保存对象的元数据相关信息,这些元数据相关信息是可以单独创建和设置的,等于对象存储的扩展,支持属性的值对存储。这个作用就是提供给 ceph 内部使用,暂时用处不大。 一、块存储设备元数据管理 对于块存储,在存储的过程中主要是块的相关信息。块的元数据信息管理,创建一个块设备后会创建一个默认的 rbd 的元数据文件。 0001 :这里首先创建一个块设备,该块设备的大小为 100M 。 0002

RT-Thread 虚拟文件系统使用

萝らか妹 提交于 2019-11-30 04:52:04
RT-Thread 虚拟文件系统使用 一、挂载管理 文件系统初始化步骤 1、初始化 DFS 组件 /** * this function will initialize device file system. */ int dfs_init ( void ) { . . . . . . . . . . . } INIT_PREV_EXPORT ( dfs_init ) ; 2、 初始化具体的文件系统 使用dfs_register()注册具体的文件系统 1、devfs_init() —> dfs_register(&_device_fs) /* 如果开启了RT_USING_DFS_DEVFS,则会在dfs_init中完成自动初始化*/ 2、elm_init() --> dfs_register(&dfs_elm) /* 初始化elm文件系统 */ 3、在存储器上创建块设备 因为只有块设备才可以挂载到文件系统上,因此需要在存储设备上创建所需的块设备。如果存储设备是 SPI Flash,则可以使用 “串行 Flash 通用驱动库 SFUD” 组件,它提供了各种 SPI Flash 的驱动,并将 SPI Flash 抽象成块设备用于挂载,注册块设备过程如下图所示: 1、rt_hw_spi_device_attach(“spi2”, “spi20”, GPIOB, GPIO_PIN_12);

块存储、文件存储、对象存储的优缺点、应用场景

橙三吉。 提交于 2019-11-29 14:53:38
参考文章链接: 一篇文章让你理解Ceph的三种存储接口(块设备、文件系统、对象存储): https://blog.csdn.net/wangmingshuaiguo/article/details/92628036 Ceph介绍及原理架构分享: https://www.jianshu.com/p/cc3ece850433 Red Hat Ceph存储—《深入理解Ceph架构》: http://ceph.org.cn/2018/06/29/red-hat-ceph%E5%AD%98%E5%82%A8-%E3%80%8A%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3ceph%E6%9E%B6%E6%9E%84%E3%80%8B/ ceph IO切割成对象和对象名的组成(块存储): https://blog.csdn.net/a1454927420/article/details/78134554 三种存储类型比较-文件、块、对象存储: https://blog.csdn.net/sinat_27186785/article/details/52032431 块存储就是在物理层这个层面对外提供服务,使用它的系统,有用自己的文件系统格式化。这样一旦被一个系统使用,就独占了。 文件存储,就是在文件系统一层对外提供服务,系统只用访问文件系统一级就可以

008NAND_FLASH驱动

試著忘記壹切 提交于 2019-11-29 05:59:48
一、 NAND_FALSH原理及硬件操作(第十九课/第一节) A、 回顾块设备驱动 应用程序读写一个普通文件,最终肯定会去操作到硬件上(比如Flash),这个普通的文件存在什么地方,文件系统会把对普通文件的读写转换为一项一项的对块设备的读写操作,然后会调用"ll_rw_block"这个函数,这个函数就会把这些一项一项的读写操作放入队列优化然后调用请求处理函数执行。 B、 回顾怎么写块设备驱动程序 1. 分配gendisk结构:alloc_disk 2. 设置:a.分配/设置队列;b.设置其它属性(比如容量等) 3. 注册:add_disk C、 NandFlash硬件原理图: D、各引脚作用: 问1:原理图上NAND_FLASH和S3C2440之间只有(DATA0~DATA7)数据线,怎么传输地址呢? 答1:在DATA0~DATA7上既有传输数据,又传输地址,还传输命令。当ALE为高电平时传输的是地址;当ALE为低电平时传输的是数据。 问2:从NAND_FLASH芯片手册可知,要操作NAND_FLASH需要先发出命令,怎么传入命令? 答2:当ALE为高电平时传输的是地址;当CLE为高电平时传输的是命令;当ALE和CLE都为低电平时传输的是数据。 问3:数据线既接到NAND_FLASH,也接到NOR_FLASH,还接到SDRAM,DM9000等等? 答3:这些设备在访问之前必须"选中

007块设备驱动

纵饮孤独 提交于 2019-11-29 05:55:06
一、 块设备驱动程序的引入(第十八课/第一节) 总结一下字符设备驱动程序: 1、引入字符设备驱动程序 当应用程序调用 open 时,驱动程序的 drv_open 函数就会被调用。 2、 最简单驱动程序的写法 1. 确定主设备号:可以自己确定,也可让内核分配。 2. 构造驱动中的"open,read,write"等函数,然后放入"file_operation"结构体里。 3. register_chrdev 注册字符设备,把构造的"file_operation"结构放到内核的字符设备中的以主设备号为下标的数组中去。"register_chrdev(主设备号,主设备名,file_operation结构)." 4. 入口函数:调用这个"register_chrdev"函数,内核装载某个模块时,会自动的调用这个入口函数。 5. 出口函数:调用"unregister_chrdev" 3、 我们按键驱动为例写了很多个驱动程序 1. 查询方式:驱动程序提供一个读函数,直接返回某个引脚状态,应用程序会不断的读取,比较前后两次的引脚状态是否有变化。CPU的占用率会很高。 2. 中断方式(休眠唤醒):应用程序使用读函数时进入驱动程序的读函数。在驱动程序里,若没有数据就休眠,若有中断发生就会被唤醒,然后copy_to_user把数据拷贝到用户空间。 3. poll机制:就像定闹钟一样

第四季-专题18-FLASH驱动程序设计

二次信任 提交于 2019-11-29 04:20:27
专题18-FLASH驱动程序设计 第1课-块设备驱动系统架构 块设备快速体验 块设备是指只能以块为单位进行访问的设备,块大小一般是512个字节的整数倍。常见的块设备包括硬件,SD卡,光盘等。 l insmod simple-blk.ko l ls /dev/simp_blkdev0 l mkfs.ext3 /dev/simp_blk0 l mkdir –p /mnt/blk l mount /dev/simp_blk0 /mnt/blk l cp /etc/init.d/* /mnt/blk l ls /mnt/blk l umount /mnt/blk l ls /mnt/blk 块设备驱动系统架构 (1) 系统架构-VFS VFS是对各种具体文件系统的一种封装,为用户程序访问文件提供统一的接口。 (2) 系统架构-cache 当用户发起文件访问请求的时候,首先会到Disk Cache中寻找文件是否被缓存了,如果在cache中,则直接从cache中读取。如果数据不在缓存中,就必须要到具体的文件系统中读取数据了。 (3) Mapping Layer l 首先确定文件系统的block size,然后计算所请求的数据包含多少个block。 l 调用具体文件系统的函数来访问文件的inode结构,确定所请求的数据在磁盘上的地址。 (4) Generic Block Layer

qemu-nbd方式挂载qcow2镜像

余生颓废 提交于 2019-11-28 00:21:53
网络块设备: Network Block Device   可以将一个远程主机的磁盘空间,当作一个块设备来使用.就像一块硬盘一样.   使用它,你可以很方便的将另一台服务器的硬盘空间,增加到本地服务器上.   NBD与NFS有所不同.NFS只是提供一个挂载点供客户端使用,客户端无法改变这个挂载点的分区格式.   而NBD提供的是一个块设备,客户端可以把这个块设备格式化成各种类型的分区.更便于用户的使用.   NBD是一个内核模块,大部分 Linux 发行版都已包含它. 在centos中, 编译成模块NBD, 保存在 /lib/modules/$version/kernel/driver/block/   远程服务器是一段轻量级的守护进程代码,它提供对远程设备的访问,而且该守护进程并不需要运行在linux平台之上。本地操作系统必须是linux,而且要支持Linux内核NBD驱动,并且能够运行本地客户端进程.         图1.NBD在本地客户端代表远程资源   文件系统能被挂载到NBD上(图1),而且NBD设备也能够用来组成冗余磁盘阵列(RAID)。在本地Linux上挂载一个EXT2文件系统到NBD,其传输率要比在同样的远程机器上挂载一个NFS快.        图2.使用NBD的冗余磁盘阵列 1. 加载 nbd 驱动 deepin@deepin:~$ grep NBD

使用DRBD+KEEPALIVED来实现NFS高可用

∥☆過路亽.° 提交于 2019-11-27 17:12:39
目录 一 DRBD介绍 二 DRBD的模式 三 DRBD的同步协议 四 实验环境 五 安装配置 关于脑裂(split-brain)处理 一 DRBD介绍 DRBD(Distributed ReplicatedBlock Device)是一种基于软件的,无共享,分布式块设备复制的存储解决方案,在服务器之间的对块设备(硬盘,分区,逻辑卷等)进行镜像。 也就是说当某一个应用程序完成写操作后,它提交的数据不仅仅会保存在本地块设备上,DRBD也会将这份数据复制一份,通过网络传输到另一个节点的块设备上,这样,两个节点上的块设备上的数据将会保存一致,这就是镜像功能。 DRBD是由内核模块和相关脚本而构成,用以构建高可用性的集群,其实现方式是通过网络来镜像整个设备。它允许用户在远程机器上建立一个本地块设备的实时镜像,与心跳连接结合使用,可以把它看作是一种网络RAID,它允许用户在远程机器上建立一个本地块设备的实时镜像。 DRBD工作在内核当中,类似于一种驱动模块。DRBD工作的位置在文件系统的buffer cache和磁盘调度器之间,通过tcp/ip发给另外一台主机到对方的tcp/ip最终发送给对方的drbd,再由对方的drbd存储在本地对应磁盘 上,类似于一个网络RAID-1功能。在高可用(HA)中使用DRBD功能,可以代替使用一个共享盘阵。本地(主节点)与远程主机(备节点)的数据可以保