• 读者文摘
  • 美文摘抄
  • 短文摘抄
  • 日记大全
  • 散文精选
  • 感恩亲情
  • 人生感悟
  • 智慧人生
  • 感悟爱情
  • 心灵鸡汤
  • 实用文档
  • 名人名言
  • 伤感文章
  • 当前位置: 蜗牛文摘网 > 日记大全 > kernel内核 linux2.4/2.6内核kernel对Initrd的处理流程

    kernel内核 linux2.4/2.6内核kernel对Initrd的处理流程

    时间:2020-02-14 08:24:27 来源:千叶帆 本文已影响

      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教程linux2 4 2 6内核kernel对Initrd的处理流程linux2 6内核源码下载linux2 6内核目录树

    • 名人名言
    • 伤感文章
    • 短文摘抄
    • 散文
    • 亲情
    • 感悟
    • 心灵鸡汤