我们在写块设备驱动程序的时候,注册并初始化一个gendisk后,要调用add_gendisk()注册到内核,供内核使用.
后面看到打开一个块设备的时候,我们看到 使用了标准的系统调用open(),参数中是inode,这个inode从何而来,看看add_disk到底干了啥哈.
初步猜测是 那个 块文件系统(一个伪文件系统),因为我们不会通过基本的VFS中的文件来Open一个块设备.
(伪文件系统也会集成到VFS中,至于和普通文件系统的区别,在http://blog.csdn.net/a954423389/article/details/6749293 中有解释,我们的确是通过VFS中的inode来打开的块设备)
add_disk中干了三件事情:
第一件:验证设备号
第二件:注册block_device(这个东西是块文件系统的元元素)
第三件:注册请求队列
可以看到第二件事是我们关注的,调用的是register_disk函数,我们跟进去看看:
325/* Not exported, helper to add_disk(). */ 326void register_disk(struct gendisk *disk) 327{ 328 struct block_device *bdev; 329 char *s; 330 int err; 331 332