如何挂载一个文件系统
挂载一个文件系统中最重要的数据结构有以下3个: 1. file_system_type 要挂载的文件系统类型。 2. super_block其中有怎样获取该文件系统相关数据的方法。 3. vfsmount 这个数据结构起到被挂载文件系统和挂载点文件系统的枢纽所用 这几个数据结构的关系,请着重看下图的红色椭圆形区域: 对照上图,我们可以得出结论,如果要挂载一个文件系统需要做的工作: 1.查找相应的文件系统类型,such as ext2 ext3 or ntfs or yaffs2 or rootfs etc. 2.查找相应的挂载点,方法:一路摸索,顺藤摸瓜。找到其dentry和inode. 3.生成一个vfsmount,这个数据结构是挂载点目录以及正在挂载的这个文件系统的根目录(依据的数据结构是:mnt_mountpoing和mnt_root)的枢纽(非常重要),并将这个vfsmount放在到hashtable中。这个hashtable的hash值运算依据的是挂载点目录以及挂载点inode.除了挂载到hashtable中外,还要链到父挂载点的子链表中。 放在hashtable的原因是,将来在lookup其内的目录或者文件时,需要根据挂载点的目录和挂载点的inode取hash值快速得到vfsmount。 4.主要的工作完成后,还需要把正在挂载的这个文件系统的根目录的inode和dentry取出来放在内存中,其中dentry的值还要赋给vfsmount的mnt_root. 当然这个第4步骤和第3步骤可能会有混合,主要是为了给vfsmount->mnt_root赋值,所以,需要取该文件系统的根目录。 按照以上的分析,我们对照review一下内核的源码的流程(为了方便,将与分析无关的语句去掉了): 2393 SYSCALL_DEFINE5(mount, char __user *...