linux 内核 不用initrd,linux2.4/2.6内核kernel对Initrd的处理流程
linux2.4内核kernel对 Initrd 的处理流程
为了使读者清晰的了解Linux2.6内核initrd机制的变化,在重点介绍Linux2.6内核initrd之前,先对linux2.4内核的 initrd进行一个简单的介绍。
Linux2.4内核的initrd的格式是文件系统镜像文件, linux2.4内核对initrd的处理流程如下:
1. boot loader把内核以及/dev/initrd的内容加载到内存,/dev/initrd是由boot loader初始化的设备,存储着initrd。
2. 在内核初始化过程中,内核把 /dev/initrd 设备的内容解压缩并拷贝到 /dev/ram0 设备上。
3. 内核以可读写的方式把 /dev/ram0 设备挂载为原始的根文件系统。
4. 如果 /dev/ram0 被指定为真正的根文件系统,那么内核跳至最后一步正常启动。
5. 执行 initrd 上的 /linuxrc 文件,linuxrc 通常是一个脚本文件,负责加载内核访问根文件系统必须的驱动, 以及加载根文件系统。
6. /linuxrc 执行完毕,真正的根文件系统被挂载。
7. 如果真正的根文件系统存在 /initrd 目录,那么 /dev/ram0 将从 / 移动到 /initrd。否则如果 /initrd 目录不存在, /dev/ram0 将被卸载。
8. 在真正的根文件系统上进行正常启动过程 ,执行 /sbin/init。
linux2.4 内核的 initrd 的执行是作为内核启动的一个中间阶段,也就是说 initrd 的 /linuxrc 执行以后,内核会继续执行初始化代码,我们后面会看到这是 linux2.4 内核同 2.6 内核的 initrd 处理流程的一个显著区别。
linux2.6 内核kernel对 Initrd 的处理流程
linux2.6 内核支持两种格式的 initrd,一种是前面 linux2.4 内核那种传统格式的文件系统镜像-image-initrd,它的制作方法同 Linux2.4 内核的 initrd 一样,其核心文件就是 /linuxrc。
另外一种格式的 initrd 是 cpio 格式的,这种格式的 initrd 从 linux2.5 起开始引入,使用 cpio 工具生成,其核心文件不再是 /linuxrc,而是 /init。
尽管 linux2.6 内核对 cpio-initrd和 image-initrd 这两种格式的 initrd 均支持,但对其处理流程有着显著的区别,下面分别介绍 linux2.6 内核对这两种 initrd 的处理流程。
cpio-initrd 的处理流程
1. boot loader 把内核以及 initrd 文件加载到内存的特定位置。
2. 内核判断initrd的文件格式,如果是cpio格式。
3. 将initrd的内容释放到rootfs中。
4. 执行initrd中的/init文件,执行到这一点,内核的工作全部结束,完全交给/init文件处理。
image-initrd的处理流程
1. boot loader把内核以及initrd文件加载到内存的特定位置。
2. 内核判断initrd的文件格式,如果不是cpio格式,将其作为image-initrd处理。
3. 内核将initrd的内容保存在rootfs下的/initrd.image文件中。
4. 内核将/initrd.image的内容读入/dev/ram0设备中,也就是读入了一个内存盘中。
5. 接着内核以可读写的方式把/dev/ram0设备挂载为原始的根文件系统。
6. .如果/dev/ram0被指定为真正的根文件系统,那么内核跳至最后一步正常启动。
7. 执行initrd上的/linuxrc文件,linuxrc通常是一个脚本文件,负责加载内核访问根文件系统必须的驱动, 以及加载根文件系统。
8. /linuxrc执行完毕,常规根文件系统被挂载
9. 如果常规根文件系统存在/initrd目录,那么/dev/ram0将从/移动到/initrd。否则如果/initrd目录不存在, /dev/ram0将被卸载。
10. 在常规根文件系统上进行正常启动过程 ,执行/sbin/init。
通过上面的流程介绍可知,Linux2.6内核对image-initrd的处理流程同linux2.4内核相比并没有显著的变化, cpio-initrd的处理流程相比于image-initrd的处理流程却有很大的区别,流程非常简单。
cpio-initrd同image-initrd的区别与优势
cpio-initrd的制作方法更加简单 ,而传统initrd的制作过程比较繁琐,后面有详细介绍。
cpio-initrd的内核处理流程更加简化
通过上面initrd处理流程的介绍,cpio-initrd的处理流程显得格外简单,通过对比可知cpio-initrd的处理流程在如下两个方面得到了简化:
1. cpio-initrd并没有使用额外的ramdisk,而是将其内容输入到rootfs中,其实rootfs本身也是一个基于内存的文件系统。这样就省掉了ramdisk的挂载、卸载等步骤。
2. cpio-initrd启动完/init进程,内核的任务就结束了,剩下的工作完全交给/init处理;而对于image-initrd,内核在执行完 /linuxrc进程后,还要进行一些收尾工作,并且要负责执行真正的根文件系统的/sbin/init。
cpio-initrd的职责更加重要
cpio-initrd不再象image-initrd那样作为linux内核启动的一个中间步骤,而是作为内核启动的终点,内核将控 制权交给cpio-initrd的/init文件后,内核的任务就结束了,所以在/init文件中,我们可以做更多的工作,而不比担心同内核后续处理的衔 接问题。当然目前linux发行版的cpio-initrd的/init文件的内容还没有本质的改变,但是相信initrd职责的增加一定是一个趋势。
linux 内核 不用initrd,linux2.4/2.6内核kernel对Initrd的处理流程相关推荐
- linux提高nand速度,linux-2.6.31.1内核支持Nand Flash
linux-2.6.31.1支持Nand Flash 目的:使NandFlash驱动同时支持64M, 256M或更高容量的NandFlash 将linux内核解压在/opt目录下,修改内核源码文件,添 ...
- linux 内核配置lcd,Linux-2.6.32.2内核在mini2440上的移植---添加LCD背光驱动
移植环境(红色粗字体字为修改后内容,蓝色粗体字为特别注意内容) 1,主机环境:VMare下CentOS 5.5 ,1G内存. 2,集成开发环境:Elipse IDE 3,编译编译环境:arm-linu ...
- linux内核没有iobuf,LINUX2.6.26.6内核下双口RAM的驱动函数测试成功!
驱动程序: #include //#include #include #include #include #include #include #include //#include #include ...
- linux内核snat分析,Linux2.6.29.6内核netfilter代码中SNAT的过程跟踪
内核netfilter是通过iptables进行进行过滤规则设置的,因此snat方可通过IPtables工具设置一定的规则来实现.为了得到snat的工作原理,这里介绍一下它的流程: 在挂钩点NF_IP ...
- 新增linux驱动并重新编译内核,【转】配置并编译内核[更新到linux-2.6.29.2]
有关内核精简的内容,看3楼. 一.下载源代码和编译软件准备下载内核源代码:http://www.kernel.org/ 注意,点击2.6.29内核的F版,即完整版. 如果你懒得去网站点联接,运行下列命 ...
- linux 内核2.6.35.3,linux-2.6.35.3内核移植(s3c2440)
忙乎了一个下午,总算忙乎出来了,不过前期大量的搜索工作别人已经完成. 大量参考:http://blog.csdn.net /huihui1988/archive/2010/08/09/5799500. ...
- Y410P用虚拟机装Linux系统,OK6410、Linux2.6.36内核移植,DM9000 驱动移植
对照这个结构体 将那些进行修改,注意 by acanoe 的语句为修改重点. // add by acanoe 2 &s3c_device_nand,//这一语句为添加nand 设 ...
- Linux-2.6.32.2内核在mini2440上的移植(四)---根文件系统制作(1)
移植环境(红色粗字体字为修改后内容,蓝色粗体字为特别注意内容) 1,主机环境:VMare下CentOS 5.5 ,1G内存. 2,集成开发环境:Elipse IDE 3,编译编译环境:arm-linu ...
- linux内核编译如何选择cpu类型,Ubuntu内核编译和CPU Hot-Plug特性配置全过程及遇到问题记录...
最近编译Palacios需要linux的内核支持cpu Hot-Plug(内存热插拔)特性,无奈我机器上安装的Ubuntu10.04系统默认不支持内存热插拔特性,所以需要修改配置文件并重新编译linu ...
最新文章
- java使用Maven加载JDBC:mysql-connector连接MySQL/MariaDB
- [2009.08.09]博客园北京俱乐部活动暨《博客园精华集:Web标准之道》现场签售通知...
- PCA与LDA两种降维方法原理的简要对比
- Scala入门到精通——第二十节 类型参数(二)
- leetcode 700. 二叉搜索树中的搜索 思考分析
- Dijkstra(迪杰斯特拉)算法的总结
- Vue学习笔记(六) 表单输入绑定
- ajax连接mysql数据库查询数据_ajax动态查询数据库数据并显示在前台的方法
- FragmentSharedFabTransition
- (附源码)RN Demo
- VSCode Latex Workshop 设置 XeLatex 编译
- 包装严重的IT行业,作为面试官,我是如何甄别应聘者的包装程度
- c语言vc怎么改变背景板颜色,VC OnCtlColor函数来修改控件背景颜色
- Bitmovin首席执行官Stefan:开发者正在构建视频产品的未来
- vue中 给v-for渲染的元素动态添加移除类名
- 视频去水印工具有什么 哪个去水印软件好用
- 前端安全跨站脚本攻击
- java谷歌填表_chrome自动填表会遮挡input中背景图的问题解决方法
- 计算机一级考试选择题知识点,计算机一级选择题必背知识点有哪些?快来了解一下...
- Nilsson's sequence score算法解决八数码问题解释
热门文章
- Matrix Analysis With Mathematica
- 单单训练营 第四期 第八课 行业和岗位
- Visual Studio各版本工程文件之间的转换(VS低版本打开高版本、高版本打开低版本项目问题)
- java cas volatile_VolatileCAS浅析
- IO存储,硬盘,文件系统相关常识总结
- 100句关于生命的名人名言
- 为什么枚举类是单例模式?
- FPGA综合实验 05 - | VGA彩条信号显示控制电路设计
- App换量攻略|实操技巧+换量神器,app换量推广
- Carnac源码下载编译(win10,VS2022)