现在的kernel里,有个叫做ramfs的文件系统,会把initrd(或者ramdisk,为惯性叫法)里的东西挂载到early-rootfs里(即rootfs,是ramfs的一个特殊实例),执行一些在kenrel里很难执行的操作,这样简化了kernel,方便了调试。随后可以根据需要用switch root过程删掉现在的rootfs,把真正的根文件系统挂载起来。

早期kernel里的这个机制叫做ram disk,但这个机制比较慢,弊端比较多,所以kernel里被ramfs给替代了,但实体文件还叫initrd,而非initramfs。initramfs是在kernel后边附加一个cpio格式的image,initrd是一个独立于kernel的cpio image。

tmpfs是ramfs的衍生物,可以将文件写入swap中,ramfs不可以;tmpfs有大小限制。tmpfs位于mm/shmem.c中,而非fs下

在start_kernel函数里,和文件系统相关的启动流程如下:

start_kernel——>vfs_caches_init_early————vfs_caches_init———————— rest_init——>kernel_init————>kernel_init_freeable

|                                     |                                                                                            |

dcache_init_early                kmem_cache_create                                                               do_basic_setup————>shmem_init(tmpfs初始化)

|                                     |                                                                                           |

inode_init_early                       dcache_init                                      sys_open((const char __user *) "/dev/console", O_RDWR, 0)(标准输入文件描述符)

|                                                                                            |

inode_init                                                                         (void) sys_dup(0);

|                                                                                             |

files_init                                                                            (void) sys_dup(0);

|                                                                                             |

mnt_init                                                                                /  存在/init? \

|                                                                                    Y                   N

bdev_cache_init                                                                       /                         \

|                                              执行/init,没有根文件系统了                            prepare_namespace

chrdev_init                                        (initramfs,安卓目前采用的)                                          |

initrd_load

|

mount_root(下边的流程挂载真正根文件系统)

|

devtmpfs_mount("dev")

|

sys_mount(".", "/", NULL, MS_MOVE, NULL)

|

sys_chroot(".")

start_kernel

|

|

V

vfs_caches_init_early-------------------->dcache_init_early

|

|

inode_init_early

Linux kernel 文件夹说明

Linux 内核代码的目录结构 arch: 包含和硬件体系相关的的代码,每种硬件平台占一个相应的目录,如i386,arm, arm64, powerpc,mips等. block: 块设备驱动程序I/ ...

Linux Kernel 排程機制介紹

http://loda.hala01.com/2011/12/linux-kernel-%E6%8E%92%E7%A8%8B%E6%A9%9F%E5%88%B6%E4%BB%8B%E7%B4%B9/ ...

Linux内核3.0移植并基于Initramfs根文件系统启动

Linux内核移植与启动 Target borad:FL2440 Bootloader:U-boot-2010.09 交叉编译器:buildroot-2012.08 1.linux内核基础知识 首先, ...

从ramdisk根文件系统启动Linux成功,及使用initramfs启动linux

下面两篇文章是ARM9论坛上的讲解ramdisk文件系统的很不错的文章 今天做了个试验,让Linux2.6.29.4从ramdisk根文件系统启动成功,总结一下. 其中涉及的内容较多,很多东西不再详述 ...

从ramdisk根文件系统启动Linux 二

今天做了个试验,让Linux2.6.29.4从ramdisk根文件系统启动成功,总结一下.其中涉及的内容较多,很多东西不再详述,如需深入研究请查阅相关资料(百度或谷歌一下一大堆). 开发环境:Fedo ...

linux文件系统启动流程、启动脚本

linux文件系统启动流程.启动脚本 下面是一张Linux启动流程图: 在了解启动流程之前,我们应该先知道系统的几个重要脚本和配置文件,他们对应的路径为: 1. /sbin/init 2. /etc/ ...

linux kernel 模块多文件编译

/*************************************************************************** * linux kernel 模块多文件编译 ...

Android 怎样在linux kernel 中读写文件

前言          欢迎大家我分享和推荐好用的代码段~~ 声明          欢迎转载,但请保留文章原始出处:          CSDN:http://www.csdn.net        ...

Linux文件系统启动过程及login的实现

1. busybox简介 busybox是一个集成了一百多个最常用linux命令和工具的软件,它将许多常用的LINUX命令和工具结合到了一个单独的可执行程序中.虽然与相应的GNU工具比较起来,busy ...

随机推荐

Tara's Beautiful Permutations 组合数学

https://www.hackerrank.com/contests/hourrank-15/challenges/taras-beautiful-permutations 首先先统计一下个数为2的 ...

Qt的皮肤设计(Style Sheet)

Qt的皮肤设计,也可以说是对Qt应用程序的界面美化,Qt使用了一种类CSS的样式规则QSS. 一.Style Sheet的应用 1.直接在程序代码中设置样式,利用setStyleSheet()方法 ...

Java:构造器,构造代码块,静态代码块的执行顺序

1.构造器:与类同名且没有返回值,用来初始化类属性: 构造器又分为无参构造器和有参构造器 1.1:无参构造器 public class Contruction{ ...属性... public Con ...

Android Studio科普篇——2.误区

1.删除一行是ctrl+x? 这是一个被谣传得很广泛的快捷键,但其实删除一行的快捷键不是ctrl+x,而是ctrl+y.ctrl+x在不选中内容的情况下,是剪切当前行,而ctrl+y才是删除当前行,它 ...

Java 日期比较大小

import org.junit.Test; import java.text.SimpleDateFormat; import java.util.Date; /** * @author DateJ ...

Matlab-5:牛顿迭代法工具箱

function [f,L]=Newton(f,a) %this is newton teration whic is used for solving implicit One-dimensiona ...

deque双端队列用法

#include #include #include #include ...

Java设计模式中适配器模式的实现方法

在Java开发中,我们常常需要用到Java接口型模式中的适配器模式,那适配器设计模式到底是什么模式呢? 适配器模式(Adapter)就是把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹 ...

Asp.net自定义控件开发任我行(8)-数据集绑定

摘要 已经有好几天没有写博客了,今天继续,前几天写到了注册自定义事件,今天我们来讲数据集绑定. 先把运行效果截个图给大家看,让大家心里也有个底.(大家要从第一章开始看起,我们每一章都是接着前面没做完的 ...

Linux文件的IO操作 一

系统调用 系统调用: 操作系统提供给用户程序调用的一组“特殊”接口,用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务 为什么用户程序不能直接访问系统内核提供的服务 为了更好地保护内核空间, ...

linux 文件系统 启动,linux kernel文件系统启动部分相关推荐

  1. Linux文件系统(四)文件缓存

    Linux文件系统 Linux文件系统(一)文件系统概述 Linux文件系统(二)磁盘文件系统 Linux文件系统(三)虚拟文件系统 Linux文件系统(四)文件缓存 Linux文件系统(四)文件缓存 ...

  2. 嵌入式linux开发,开机NFS文件系统启动,使用nfs挂载根文件系统

    NFS( Network File System)即网络文件系统,是 FreeBSD 支持的文件系统中的一种,它允许网络中的计算机之间通过 TCP/IP 网络共享资源.在 NFS 的应用中, NFS ...

  3. linux 文件系统 代码,Linux文件系统介绍

    本篇博文介绍一下Linux系统的文件系统, 由于Linux标准委员会制定了一个文件系统标准FHS, 文件系统层级标准, 规定Linux发行版应该创建哪些目录存储特定类型的文件. 根目录记为 / 一级目 ...

  4. linux 文件系统 vfs,Linux 万物皆文件—VFS文件系统

    linux 里面当我们执行 ls -li 命令 的时候会发现,很多文件类型.例如: – 普通文件 d 目录文件 s socket 文件 b 块设备文件 比如说磁盘 l  连接文件 p 管道文件 他们虽 ...

  5. linux文件系统分隔符,Linux的哲学思想和文件系统

    Linux的哲学思想 Linux是一个自由的操作系统,其内部也有着自己独特的一些特定的规则,就是我们所说的关于Linux的哲学思想. Linux系统的哲学思想 1.一切皆文件:Linux系统把几乎所有 ...

  6. linux文件系统 var,Linux文件系统

    /:根目录 /bin:二进制,可执行命令 /sbin:可执行命令,仅用于管理,通常只有管理员才有权限使用. /boot:引导,操作系统用于引导系统启动的文件,一般指内核,grub /dev:设备文件 ...

  7. Linux文件系统中文版,Linux 文件系统-Go语言中文社区

    文件系统: rootfs: 根文件系统 FHS: linux /boot : 系统启动相关的文件,如内核,initrd, 以及grub(bootloader) /dev : 设备文件 设备文件: 块设 ...

  8. linux 文件系统路径,Linux编程 1 (文件系统路径说明, 目录结构说明)

    一. Linux文件系统路径说明 熟悉windows系统的,都知道文件路径表示,如C:\User\rich\Documnets\test.doc. 在linux中目录称为虚拟目录(virtual di ...

  9. linux 文件系统 vfs,linux虚拟文件系统vfs

    <操作系统>课程设计报告课程设计题目:操作系统课程设计 设计时间:2016/1/10一. 课程设计目的与要求需要完成的内容:(1) 安装虚拟机:Vmware.Vmware palyer ( ...

最新文章

  1. linux驱动开发要知道的那些知识(三)------container_of,定时器 及系统调用
  2. Cocos2d-精灵的几个常识
  3. 为什么用抽象三层结构
  4. 2008年初看的书[带简评]
  5. 最近邻插值、双线性插值、双三次插值
  6. 【剑指offer】35、复杂链表的复制
  7. 雷军正式入驻B站,或为小米新品直播带货做准备
  8. cf不能全屏win7的解决方法_win10玩cf不能全屏的解决方法教程
  9. iOS 使用UIView的一种有效方法
  10. 软件工程导论 四则运算
  11. Java clone() 浅拷贝 深拷贝
  12. 【一文讲通】BLDC的六步法PMSM的FOC法综合
  13. 面试题:socket的流程
  14. 攀升笔记本电脑P1X Deepin20.3安装 RTL8821CE RTL8152无线网卡驱动
  15. zblog asp 升级到PHP,Zblog之php版本 千呼万唤始出来
  16. PostgreSQL的学习心得和知识总结(十九)|数据库游标详细使用说明及特性总结(全网最精细最详尽 仰望星空也要脚踏实地)
  17. 倍数(Python)
  18. scons的使用方法和进阶
  19. Python模块学习 - openpyxl - 处理 Excel 电子表格
  20. AD域帐户密码过期,终端802.1x认证自动重连导致AD账号被锁,员工无法上网、办公怎么办?

热门文章

  1. props写法_好程序员web前端培训React中事件的写法总结
  2. 网格员计算机基本操作,网格交易总结系列(一)基本操作篇
  3. vba mysql odbc_使用VBA+ODBC+MySQL实现Excel网络版
  4. 开发一次、多端覆盖的开源统一框架
  5. 开源、免费、提升办公效率,Win10官方出品
  6. 分布式 WebSocket 集群解决方案
  7. 万字长文,说透了 Openshift4 的安装过程!
  8. 深度学习手势识别带你玩转神庙逃亡
  9. android 分辨率合集,Android编程之分辨率处理相关代码段合集
  10. 微信小程序上传图片时provisional headers are shown显示我的错误解决方案