浅尝辄止60-FAT32-内核2

从mount到fill super

mount

挂载FAT系列U盘时,mount命令一般如下

mount -t vfat <块设备文件> <挂载点>

也有一个系统调用名字也叫mount,可以用man查看命令和系统调用的说明。man mount是查命令,man 2 mount是查系统调用。
系统调用的定义在kernel/fs/namespace.c中

SYSCALL_DEFINE5(mount, char __user *, dev_name, char __user *, dir_name,
        char __user *, type, unsigned long, flags, void __user *, data)
{
    int ret;
    //...
    ret = do_mount(kernel_dev, dir_name, kernel_type, flags,
        (void *) data_page);
    //...
    return ret;
}

调用关系是
mount==>
do_mount==>
do_new_mount==>
vfs_kern_mount==>
mount_fs[kernel/fs/super.c]==>
type->mount==>
vfat_mount[kernel/fs/fat/namei_vfat.c]==>
mount_bdev(...,vfat_fill_super)[kernel/fs/super.c]==>
fill_super==>
vfat_fill_super
这里mount_fs中的type就是vfat的身份信息,所以type->mount就是指向vfat_mount的。
vfat_mount中调用了一个分区分文件系统的函数mount_bdev,传入的最后一个参数是vfat_fill_super,顾名思义vfat_fill_super是负责给超级块结构体填充信息的函数,填充超级块是挂载时最重要的工作。

你可能感兴趣的:(浅尝辄止60-FAT32-内核2)