OK6410A 开发板 (八) 78 linux-5.11 OK6410A 文件系统启动总览

文件系统初始化分为两个阶段,时间点如下
	1. start_kernel -> kernel_init // .s 到 start_kernel 没有 文件系统 什么事
	2. kernel_init -> ...

且我们讨论的时候,以 无 init_xxx 技术的启动流程为准
一二阶段概览
  • 第一阶段
start_kernel
	vfs_caches_init_early
	vfs_caches_init
		mnt_init
			init_rootfs
				初始化  is_tmpfs 
			init_mount_tree 
				//利用 rootfs文件系统提供的 函数 在内存中创建 VFS根
				//将创建的 mnt和dentry 信息 记录到 idle进程的 TCB(init_task) 中的 namespace 中,以便 其他所有进程都继承该信息
				//mnt 中的 mnt_sb 指针指向 sb
				//mnt_root 和 mnt_mountpoint 指针指向 dentry
				//mnt_parent指针则指向自身
				//并挂载了 rootfs ???
				
	// 可以利用 rootfs所提供的函树为 VFS 增加一个新的目录节点
	// VFS 中各目录的主要用途是为以后挂载文件系统提供挂载点
	// VFS根 也是一个挂载点,且这个挂载点是 真正文件系统的挂载点
	// 此时说的真正文件系统 不一定是磁盘文件系统
  • 第二阶段
kernel_init
	prepare_namespace
		mount_root	
			//挂载真正的文件系统 到 VFS根 下的 root目录(即/root)
			//(在这里以root=/dev/mmcblk0p2中的rootfstype=ext3为例,该文件系统根目录有/linuxrc)
		devtmpfs_mount
		init_mount(".", "/", NULL, MS_MOVE, NULL);
			// 将当前目录"/root"上的vfsmount(该结构体此时代表硬盘上真正文件系统)挂载到"/"目录
		init_chroot(".");
			// 切换到 "/"
			// 此时如果 真正文件系统 中顶层目录中有 linuxrc ,那么VFS目录架构中就会有 /linuxrc
	init_post
		run_init_process(execute_command)	//内核参数为init=/linuxrc




第一阶段
[第二阶段]
mount_root
	// 此时 rootfs挂载到 VFS根
	create_dev("/dev/root", ROOT_DEV); // 利用 rootfs的函数来创建设备节点
	mount_block_root("/dev/root", root_mountflags);

"挂载"本质上是什么
关键字:
	挂载点
	挂载物
挂载过程:
	将挂载物 挂载 到 挂载点上
关键字解读:
	挂载点 对于 ubuntu 上的用户来说 是 目录(/mnt),对于内存来说是 struct dentry
	挂载物 对于 ubuntu 上的用户来说 是 分区(/dev/sdb1),对于内存来说是 struct mount(之前版本为struct vfsmount)

挂载过程:
	每进行一次mount ,内存中就会 新建一个挂载物(struct mount)
	在内存中 目录 用 struct dentry 表示,注意 struct dentry 在另一个挂载物中
	
	挂载是 将 struct dentry(挂载点)struct mount(挂载物) 建立联系
		struct mount(挂载物) 的 mnt 成员值 为 struct dentry(挂载点)的地址
		struct mount(挂载物) 的 mnt_mounts 成员值 为 struct dentry(挂载点)所在的挂载物(另一个struct mount)的地址
		struct mount(挂载物) 的 mnt_parent 成员值 为 struct dentry(挂载点)所在的挂载物(另一个struct mount)的地址
		struct dentry(挂载点)所在的挂载物(另一个struct mount)的mnt_child成员值 为 当前struct mount(挂载物)的地址
  • 挂载物
    在这里插入图片描述
  • 挂载点

在这里插入图片描述

  • 挂载物挂载到挂载点时的状态
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值