Linux VFS文件系统之挂载/注册rootfs文件系统

【推荐阅读】

浅谈linux 内核网络 sk_buff 之克隆与复制

深入linux内核架构--进程&线程

了解Docker 依赖的linux内核技术

#纯属个人理解,如有问题敬请谅解!

#kernel version: 2.6.26

#Author: andy wang

一: 序言

文件系统在linux这个“阿房宫”中扮演着重要的角色,它与许多其他子系统紧密联系;关系错中复杂,但是要想对linux有一个深入的理解,文件系统这关是必须要过的。在linux中用虚拟文件系统(VFS)来为linux文件系统提供一个统一的模型,VFS是一个纯软件机制;它为文件系统的操作提供了一个统一的接口)(文件read,write……);是linux实现’一切皆文件’的口号实现的基础。

在linux系统中VFS就是一颗庞大的目录树,下面是基本结构图:

二:rootfs注册

既然是一棵树那么根就是它存在的基础, 所以要研究VFS我们必须从文件系统的根入手;那么VFS的根什么咋个建立起来的呢? 以及VFS这颗大树是如何发展起来的呢?要弄清楚这么都必须先从rootfs入手,接下来我们就具体看一下rootfs文件系统是咋个建立起来的。

在linux kernel初始化阶段会调用int __init init_rootfs(void)向内核注册rootfs文件系统,下面看看rootfs怎样注册到内核中的:

这个函数比较简单,函数被宏__init修饰,说明该函数被linux链接脚本链接到.init段中,在系统初始化的时候调用,而在调用完之后会将其占用的内存释放掉,在kernel中定义的一些修饰宏还是挺有意思的,以后有时间得专门写个文档..好了我们来看看代码, 其中核心的函数为register_filesystem();这个函数将结构file_system_type 注册在内核一个单链表中,每个文件系统必须调用此函数来注册到内核.

三: rootfs挂载

此时该文件系统已经成功注册到内核中,在后面的挂载文件系统中需要再次遍历链表取出对于的file_system_type结构进行挂载。接下来该分析rootfs挂载过程了,先看看流程图:

顺着上面的程序流程图,我们来具体跟一下源代码; 挂载rootfs首先会调用do_kern_mount()函数,具体代码段为:

struct vfsmount *
do_kern_mount(const char *fstype, int flags, const char *name, void *data)
{
         struct file_system_type *type = get_fs_type(fstype);
         struct vfsmount *mnt;
         if (!type)
                   return ERR_PTR(-ENODEV);
         mnt = vfs_kern_mount(type, flags, name, data);//挂载的核心函数
         …………….
         return mnt;
}

根据传入文件系统的名字fstype,调用get_fs_type()去匹配刚才注册的文件系统,如果未找到返回失败.接下来会调用挂载文件系

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值