storage R&D guy.
全部博文(1000)
分类: LINUX
2017-01-20 14:04:27
原文地址:注册块设备的过程分析 作者:alloysystem
add_disk的主要功能总结如下
1、将一个磁盘对象gendisk加到bdev_map中
Blk_register_region
这个函数会操作类型为 struct kobj_map的全局变量bdev_map,它将gendisk对象加入到bdev_map中
2、在/dev目录下生成一个设备节点
3、生成一个block_device对象和一个隶属于bdev文件系统的inode节点,这两个数据结构都位于struct bdev_inode中,所以通过bdev文件系统的inode可以容易的获得block_device对象。
struct bdev_inode {
struct block_device bdev;
struct inode vfs_inode;
};
4、扫描磁盘,如果有分区就在/dev目录下面增加节点
如果add_disk加入到系统的块设备上面有分区,会是什么情况呢。
A、rescan_partitions函数会调用disk_expend_part_tbl来扩展gendisk->part_tbl
B、调用add_partition向系统添加分区设备
(a)分配一个struct hd_struct
(b)Gendisk->part_tbl->part[partno] = p
(c)调用device_add将分区设备加入到系统中