linux文件系统初始化过程(1)---概述

术语表:

struct task:进程

struct mnt_namespace:命名空间

struct mount:挂载点

struct vfsmount:挂载项

struct file:文件

struct super_block:超级块

struct dentry:目录

struct inode:索引节点

 

一、目的

    linux文件系统主要分为三个部分:文件系统调用;虚拟文件系统(VFS);挂载到VFS的实际文件系统。

    其中,VFS是核心,linux文件系统的本质就是在内存中创建一棵VFS树。当根目录被创建后,用户就可以使用系统调用在VFS上创建文件、删除文件、挂载各种文件系统等操作。

    该系列文章主要分析linux3.10文件系统初始化过程,分为三个阶段:

    1、挂载根文件系统(rootfs);

    2、加载initrd;

    3、挂载磁盘文件系统;

 

二、常用数据结构

    linux文件系统中重要的数据结构有:文件、挂载点、超级块、目录项、索引节点等。每个数据结构的具体实现请参见源代码,这里不再描述。

    为了直观的表示数据结构之间的关系,请参见图1:图中含有两个文件系统(红色和绿色表示的部分),并且绿色文件系统挂载在红色文件系统tmp目录下。一般来说,每个文件系统在VFS层都是由挂载点、超级块、目录和索引节点组成;当挂载一个文件系统时,实际也就是创建这四个数据结构的过程,因此这四个数据结构的地位很重要,关系也很紧密。由于VFS要求实际的文件系统必须提供以上数据结构,所以不同的文件系统在VFS层可以互相访问。

    如果进程打开了某个文件,还会创建file(文件)数据结构,这样进程就可以通过file来访问VFS的文件系统了。

    另外,该图只给出了主要的关系结构,忽略了部分细节。

                               图1

 

三、函数调用关系

    图2描述了文件系统初始化过程中主要的函数调用关系。linux文件系统初始化过程主要分为三个阶段:

    1、vfs_caches_init()负责挂载rootfs文件系统,并创建了第一个挂载点目录:'/';

    2、rest_init()负责加载initrd文件,扩展VFS树,创建基本的文件系统目录拓扑;

    3、init程序负责挂载磁盘文件系统,并将文件系统的根目录从rootfs切换到磁盘文件系统;

                   图2

 

四、总结

    linux文件系统初始化过程主要分为三个阶段:挂载rootfs,提供第一个挂载点''/;加载initrd,扩展VFS树;执行init程序,完成linux系统的初始化。下面会详细介绍每个阶段的主要内容。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
init/main.c 是 Linux 内核中的一个关键文件,它包含了 Linux 内核的主要初始化代码。该文件定义了内核的启动过程,包括初始化各个子系统、设备驱动和启动用户空间等。 具体分析 init/main.c 的代码需要查看具体版本的 Linux 内核代码。以下是一个简要的分析概述: 1. 初始化函数: - `start_kernel()`:这是 Linux 内核的入口函数,负责初始化内核数据结构、中断、内存管理、定时器等。 - `rest_init()`:该函数初始化系统的初始化任务(init task),并创建第一个用户进程(通常是 `/sbin/init`)。 2. 初始化子系统: - `kernel_init()`:该函数调用各个子系统的初始化函数,如进程管理(`sched_init()`)、内存管理(`mm_init()`)、文件系统(`vfs_caches_init()`)等。 3. 设备驱动初始化: - `drivers/base/init.c` 中的 `driver_init()` 函数:负责注册各个设备驱动。 - `drivers/char/tty_io.c` 中的 `tty_init()` 函数:初始化终端设备驱动。 4. 用户空间启动: - `kernel_init_freeable()`:该函数通过调用 `kernel_init()` 初始化用户空间,并将系统状态切换到用户模式。 总的来说,init/main.c 文件是 Linux 内核启动过程的关键文件,负责完成内核数据结构的初始化、子系统和设备驱动的初始化,最终将系统状态切换到用户空间。它是 Linux 内核启动过程中的重要一环。对于具体的代码细节,需要查看具体版本的 Linux 内核代码。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一口Linux

众筹植发

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值