美文网首页
34 | 块设备(上)

34 | 块设备(上)

作者: AndyWei123 | 来源:发表于2020-05-11 00:33 被阅读0次
    image.png
    • 所有的块设备都在 bdev_map 中的维护,它是一个devt和gendisk的映射关系

    gendisk: gen 的意思是 general 通用的意思,也就是说,所有的块设备,不仅仅是硬盘 disk,都会用一个 gendisk 来表示

    • 所有的block_device 表示的设备都在bdev的文件系统中维护着inode节点

    bdev 伪文件系统
    block_device 结构如下

    struct block_device {
    dev_t      bd_dev;  /* not a kdev_t - it's a search key */
    int      bd_openers;
    struct super_block *  bd_super;
    ......
    struct block_device *  bd_contains;
    unsigned    bd_block_size;
    struct hd_struct *  bd_part;
    unsigned    bd_part_count;
    int      bd_invalidated;
    struct gendisk *  bd_disk;
    struct request_queue *  bd_queue;
    struct backing_dev_info *bd_bdi;
    struct list_head  bd_list;
    ......
    } ; 
    

    gendisk 指向该块设备的gendisk ,他们是一对多的关系,比如开一个硬盘被分成两个分区,那么block_device 会有三个,一个总的两个分的,request_queue 处理请求的队列,hd_struct 指各个分区,db_contains 指向总的块的block_device


    image.png
    • mknod 创建出来的块设备文件在 devtemfs 文件系统里面,特殊 inode 里面有块设备号;
    • mount 一个块设备上的文件系统,调用这个文件系统的 mount 接口;
    • 通过按照 /dev/xxx 在文件系统 devtmpfs 文件系统上搜索到特殊 inode,得到块设备号;
    • 根据特殊 inode 里面的 dev_t 在 bdev 文件系统里面找到 inode;
    • 根据 bdev 文件系统上的 inode 找到对应的 block_device,根据 dev_t 在 map 中找到 gendisk,将两者关联起来;
    • 找到 block_device 后打开设备,调用和 block_device 关联的 gendisk 里面的 block_device_operations 打开设备;
    • 创建被 mount 的文件系统的 super_block。

    相关文章

      网友评论

          本文标题:34 | 块设备(上)

          本文链接:https://www.haomeiwen.com/subject/axbenhtx.html