首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

详解 | Linux系统是如何实现存储并读写文件的?

块设备驱动就是用来访问这些存储设备的,其与字符设备驱动不同的是: 块设备只能以块为基本单位实现读写,块是 linux 虚拟文件系统(VFS)基本的数据传输单位。...代码框架 在记录块设备驱动的基本框架之前,先大致了解一下块设备驱动要实现的工作:在Linux驱动编程中,每一类驱动都会有一个对应的结构体。...对应设备驱动结构体定义于:include/linux/genhd.h struct gendisk { /* major, first_minor and minors are input parameters...ramdisk.gendisk->first_minor = 0; ramdisk.gendisk->fops = &ramdisk_fops; ramdisk.gendisk->queue...参考:《【正点原子】I.MX6U嵌入式Linux驱动开发指南.pdf》 后记: 源码:https://github.com/LinuxTaoist/Linux_drivers/blob/master/block_driver

1.8K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    块设备驱动初探

    simp_blkdev_data[SIMP_BLKDEV_BYTES]; static struct request_queue *simp_blkdev_queue;//请求队列 static struct gendisk...owner = THIS_MODULE, }; 1.2 加载驱动 整个过程 1.创建request_queue(每个块设备一个队列),绑定函数simp_blkdev_do_request 2.创建一个gendisk...(每个块设备就是一个gendisk) 3.将request_queue和gendisk绑定 4.注册gendisk static int __init simp_blkdev_init(void...{ //IO调度算法发挥作用的地方 } 整个调用完成之后,会绑定当前块设备的request_queue两个重要方法 q->make_request_fn = blk_queue_bio;//linux...代码参考 写一个块设备驱动.pdf 资料参考 《Linux内核设计与实现》 《Linux内核完全注释》 Linux.Generic.Block.Layer.pdf https://zhuanlan.zhihu.com

    2.1K40

    技术干货 | 漫游Linux块IO

    本篇文章,我们就一起看下Linux中一个IO请求的生命周期。Linux发展到今天,其内部的IO子系统已经相当复杂。...虚拟文件系统(VFS) 在Linux中一切皆文件,它提供了虚拟文件系统VFS的机制,用来抽象各种资源,使应用程序无需关心底层细节,只需通过open、read/write、close这几个通用接口便可以管理各种不同的资源....write = do_sync_write, ... ... .open = ext4_file_open, ... ... }; buffer/cache Linux...do_blockdev_direct_IO -> dio_bio_submit -> submit_bio 通用块层 核心结构 1.bio/request bio是Linux通用块层和底层驱动的...2.gendisk 每个块设备都对应一个gendisk结构,它定义了设备名、主次设备号、请求队列,和设备的相关操作函数。通过add_disk,我们就真正在系统中定义一个块设备。

    1.6K30
    领券