热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

linux内核对rootfs的挂载

在系统启动过程的最后阶段,linux内核在调用sys_mount挂载实际根文件系统之前,先调用了init_mount_tree()这个函数挂载了一
    在系统启动过程的最后阶段,linux内核在调用sys_mount挂载
实际根文件系统
之前,先调用了init_mount_tree()这个函数
挂载了一个虚拟的根文件系统
,这是一个基于内存的根文件系统,类似于ramfs文件系统,在挂载完这个“虚拟的”文件系统之后,建立了VFS根目录,也就是“/” 目录。然后才调用sys_mount()挂载真正的根文件系统(比如SD卡上的ext4),最后将它的挂载点移动到“/”目录,覆盖掉原先挂载的虚拟根文件系统。上面所说的真实根文件系统,指的是 有非易失性存储介质的文件系统。(比如硬盘,SD卡)

虚拟根文件系统,指的是掉电就消失的文件系统,比如linux真正第一个挂载的“根”,就是一个基于内存的根文件系统,它是虚拟的,没有对应外部非易失性存储介质。

Ramfs-rootfs-initramfs.txt
==========================================================
All 2.6 Linux kernels contain a gzipped "cpio" format archive, which is 
extracted into rootfs when the kernel boots up.  After extracting, the kernel 
checks to see if rootfs contains a file "init", and if so it executes it as PID 
1.  If found, this init process is responsible for bringing the system the rest 
of the way up, including locating and mounting the real root device (if any).  
If rootfs does not contain an init program after the embedded cpio archive is 
extracted into it, the kernel will fall through to the older code to locate and 
mount a root partition, then exec some variant of /sbin/init out of that.

he initial RAM disk is necessary for booting linux system.

the RAM disk image is created by mkinitrd.

Why is it necessary?

because we try to avoid a classic problem: "which comes first the chicken or the egg". Think about it: how do you boot the root file system if it resides on a device that requires a module in the root file system to initialize? The answer is: by using the initrd with the required module in it that is available to the kernel before the root file system is mounted. Kernel will then be started after RAM disk image is loaded.



推荐阅读
  • 本文详细介绍了如何在 Ubuntu 14.04 系统上搭建仅使用 CPU 的 Caffe 深度学习框架,包括环境准备、依赖安装及编译过程。 ... [详细]
  • 利用Node.js实现PSD文件的高效切图
    本文介绍了如何通过Node.js及其psd2json模块,快速实现PSD文件的自动化切图过程,以适应项目中频繁的界面更新需求。此方法不仅提高了工作效率,还简化了从设计稿到实际应用的转换流程。 ... [详细]
  • 函子(Functor)是函数式编程中的一个重要概念,它不仅是一个特殊的容器,还提供了一种优雅的方式来处理值和函数。本文将详细介绍函子的基本概念及其在函数式编程中的应用,包括如何通过函子控制副作用、处理异常以及进行异步操作。 ... [详细]
  • 本文整理了一份基础的嵌入式Linux工程师笔试题,涵盖填空题、编程题和简答题,旨在帮助考生更好地准备考试。 ... [详细]
  • 电商高并发解决方案详解
    本文以京东为例,详细探讨了电商中常见的高并发解决方案,包括多级缓存和Nginx限流技术,旨在帮助读者更好地理解和应用这些技术。 ... [详细]
  • 本文介绍了如何在Linux系统中获取库源码,并在从源代码编译软件时收集所需的依赖项列表。 ... [详细]
  • 本文介绍了如何使用开源工具ChkBugReport来解析和分析Android设备的Bugreport。ChkBugReport能够将复杂的Bugreport转换为易于阅读的HTML报告,并提供详细的图表和分析结论。 ... [详细]
  • 第14周实践项目(4)-验证平衡二叉树
    问题**Copyright(c)2015,烟台大学计算机学院*Allrightsreserved.*文件名称:test.cpp*作者:王敏*完成日 ... [详细]
  • HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送www方式的数据。HTTP协议采用了请求响应模型。客服端向服务器发送一 ... [详细]
  • 为了在Hadoop 2.7.2中实现对Snappy压缩和解压功能的原生支持,本文详细介绍了如何重新编译Hadoop源代码,并优化其Native编译过程。通过这一优化,可以显著提升数据处理的效率和性能。此外,还探讨了编译过程中可能遇到的问题及其解决方案,为用户提供了一套完整的操作指南。 ... [详细]
  • 在腾讯云服务器上部署Nginx的详细指南中,首先需要确保安装必要的依赖包。如果这些依赖包已安装,可直接跳过此步骤。具体命令包括 `yum -y install gcc gcc-c++ wget net-tools pcre-devel zlib-devel`。接下来,本文将详细介绍如何下载、编译和配置Nginx,以确保其在腾讯云服务器上顺利运行。此外,还将提供一些优化建议,帮助用户提升Nginx的性能和安全性。 ... [详细]
  • 本文探讨了在不解压的情况下,如何高效地从包含文本文件的.gz压缩文件中查找特定字符串的方法。通过利用特定的工具和技术,可以在保持文件压缩状态的同时,快速定位和检索所需信息,提高处理大规模数据集时的效率和性能。 ... [详细]
  • android开发分享荐                                                         Android思维导图布局:效果展示及使用方法
    思维导图布局的前身是树形布局,对树形布局基本使用还不太了解的朋友可以先看看我写的树形布局系列教程,了解了树形布局的使用方法后再来阅读本文章。先睹为快来看看效果吧,横向效果如下:纵向 ... [详细]
  • 一关于t1表和testtb的索引设计二把主键放到二级索引的后面,会否占据更多的物理空间?三InnoDB的主键该如何选择,业务ID和自增 ... [详细]
  • 最近遇到了一道关于哈夫曼树的编程题目,需要在下午之前完成。题目要求设计一个哈夫曼编码和解码系统,能够反复显示和处理多个项目,直到用户选择退出。希望各位大神能够提供帮助。 ... [详细]
author-avatar
this_is_me活在自己小世界
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有