注册 登录
LUPA开源社区 返回首页

wuting_linux的个人空间 http://www.lupaworld.com/?296848 [收藏] [复制] [分享] [RSS]

我的博客

Sysfs 虚拟文件文件系统挂载内核实现过程

已有 4838 次阅读2010-1-13 22:24

与虚拟文件系统挂载(安装)相关的两个重要的数据结构:(其中黑体部分是与虚拟文件系统挂载相关的重要成员)(基于2.6.31内核)
struct vfsmount {
        struct list_head mnt_hash;
        struct vfsmount *mnt_parent;    /* fs we are mounted on */
        struct dentry *mnt_mountpoint;  /* dentry of mountpoint */
        struct dentry *mnt_root;        /* root of the mounted tree */
        struct super_block *mnt_sb;     /* pointer to superblock */
        struct list_head mnt_mounts;    /* list of children, anchored here */
        struct list_head mnt_child;     /* and going through their mnt_child */
...……
}
struct super_block {
...……
  struct file_system_type *s_type;
        const struct super_operations   *s_op;
        struct dquot_operations *dq_op;
        struct quotactl_ops     *s_qcop;
        const struct export_operations *s_export_op;
        unsigned long           s_flags;
        unsigned long           s_magic;
        struct dentry           *s_root;
.....……
}
内核中实现sysfs虚拟文件系统挂载的函数之间的调用关系如图所示:

这样就完成了sysfs虚拟文件系统的根目录与挂载点之间的关系.而具体的挂载目录由系统调用 sys_mount()来指定.
要实现一个虚拟文件系统大体要经过如下步骤:
首先,进行一些准备工作,如sysfs中调用kmem_cache_create()创建目录项缓冲区,sysfs_inode_init()初始化inode结点.
然后,使用register_filesystem()函数注册文件系统类型;
最后,通过kern_mount()宏最终调用vfs_kern_mount()函数,建立虚拟文件系统根目录与挂载点之间的关系.
这样一来,用户就可以通过mount命令,来指定虚拟文件系统的具体挂载(安装)点.


评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册
验证问答 换一个 验证码 换一个

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部