VFS是一个虚拟的文件系统,要和实际磁盘设备联系还需要将磁盘上的文件系统mount到VFS上面。
向文件系统注册有两种途径:一种是在编译核心时确立,并在系统初始化时通过内嵌函数调用向注册表登记;
另一种是利用Linux的Module机制,把文件系统作为一个模块进行装入。
VFS用get_fs_type得到注册文件的文件系统类型。
需要指出的是:Linux并非通过设备标识访问某个文件系统(象DOS那样),而是捆绑于一个树状目录上,因此,mount一个文件系统不仅包含了文件及数据,还包含了文件系统本身的树形结构,目录,访问权限等等。
最初只有唯一的根节点( / ),它存在于内存中而非任何具体设备中。系统初始化将一个根设备安装(/dev)其上,它因此而成为了整个系统中最原始的文件系统。
值得一提的是mount命令进行系统调用的函数sys_mount():
asmlinkage long sys_mount(char __user * dev_name, char __user * dir_name,
char __user * type, unsigned long flags,
void __user * data)


{
int retval;
unsigned long data_page;
unsigned long type_page;
unsigned long dev_page;
char *dir_page;
retval = copy_mount_options (type, &type_page);
if (retval < 0)
return retval;
dir_page = getname(dir_name);
retval = PTR_ERR(dir_page);
if (IS_ERR(dir_page))
goto out1;
retval = copy_mount_options (dev_name, &dev_page);
if (retval < 0)
goto out2;
retval = copy_mount_options (data, &data_page);
if (retval < 0)
goto out3;
lock_kernel();
retval = do_mount((char*)dev_page, dir_page, (char*)type_page,
flags, (void*)data_page);
unlock_kernel();
free_page(data_page);
out3:
free_page(dev_page);
out2:
putname(dir_page);
out1:
free_page(type_page);
return retval;
}