<dl id='ufef0'></dl>

    <code id='ufef0'><strong id='ufef0'></strong></code>
    <i id='ufef0'></i>

    <ins id='ufef0'></ins>

      <acronym id='ufef0'><em id='ufef0'></em><td id='ufef0'><div id='ufef0'></div></td></acronym><address id='ufef0'><big id='ufef0'><big id='ufef0'></big><legend id='ufef0'></legend></big></address>
      <fieldset id='ufef0'></fieldset>

    1. <tr id='ufef0'><strong id='ufef0'></strong><small id='ufef0'></small><button id='ufef0'></button><li id='ufef0'><noscript id='ufef0'><big id='ufef0'></big><dt id='ufef0'></dt></noscript></li></tr><ol id='ufef0'><table id='ufef0'><blockquote id='ufef0'><tbody id='ufef0'></tbody></blockquote></table></ol><u id='ufef0'></u><kbd id='ufef0'><kbd id='ufef0'></kbd></kbd>
      <i id='ufef0'><div id='ufef0'><ins id='ufef0'></ins></div></i>
      1. <span id='ufef0'></span>

          Linux 2.4内核下的initrd.img机制分析

          • 时间:
          • 浏览:7
          • 来源:124软件资讯网

            1.什么是initrd

              initrd 的英文寄义是 boot loader initialized RAM disk  ,就是由 boot loader 初始化的内存盘  。在 linux内核启动前  , boot loader 会将存储介质中的 initrd 文件加载到内存  ,内核启动时会在会见真正的根文件系统前先会见该内存中的 initrd 文件系统  。在 boot loader 设置了 initrd 的情形下  ,内核启动被分成了两个阶段  ,第一阶段先执行 initrd 文件系统中的某个文件  ,完成加载驱动模块等使命  ,第二阶段才会执行真正的根文件系统中的 /sbin/init 历程  。

              2.Linux2.4内核对initrd的处置惩罚流程

              Linux2.4内核的initrd的花样是文件系统镜像文件initrd.img  ,常见的文件系统花样为EXT2  。

              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 执行以后  ,内核会继续执行初始化代码  。

              3.initrd文件的建立及修改

              传统initrd的制作历程比力繁琐  ,需要如下六个步骤

              #假设当前目录位于准备好的initrd文件系统的根目录

              

              bash# dd if=/dev/zero of=../initrd.img bs=512k count=5

              

              bash# mkfs.ext2 -F -m0 ../initrd.img

              

              bash# mount -t ext2 -o loop ../initrd.img /mnt

              

              bash# cp -r * /mnt

              

              bash# umount /mnt

              

              bash# gzip ../initrd.img

              为了简朴起见  ,我们主要针对于实现对于现有系统中initrd.img文件机制的修改:

              系统中的initrd.img文件大多位于/boot目录下  ,此文件为initrd.gz的符号链接 。

              为实现修改  ,我们首先将initrd.gz拷贝到用户目录下  。

              gunzip initrd.gz 解压后天生initrd的文件

              file initrd可知 ,initrd:Linux rev 1.0 ext2 filesystem data

              为了检察其文件内容  ,mount -o loop initrd /mnt/initrd(想要挂载的目录 ,可恣意选择)

              cd /mnt/initrd  ,接下来就能检察initrd内存文件系统中的内容了

              其文件系统的焦点事情流程为linuxrc的剧本文件  ,此剧本完成如下功效:

              1) 挂载系统启动所必须的装备驱动

              2) 挂载真正的文件系统

              这个时间  ,我们就能够对此文件系统举行必须的修改了 ,若是设置齐全的话  ,在这里也能够形成不亚于Linux的一个新系统呢 。  。

              修改完后  ,umount /mnt/initrd ,所作修改就能够生存进initrd的文件中

              gzip initrd ,天生新的initrd.gz文件

              建立软毗连new.initrd.img

              修改lilo或者grub的启动项  ,使之生效

              reboot后  ,就能启动新的initrd文件系统了

              4.nash command

              nash是initrd中的下令诠释器 ,主要为了运行/linuxrc剧本 ,其常用下令有:

              echo : 将字符串输出到尺度输出  ,只是功效上没有系统内里echo那么多 。

              find : 显示指定路径下所匹配名称的文件  ,即只支持linux系统里find下令中的-name参数  。

              losetup : 将文件帮定到回环装备/dev/loopdev上

              mkdevices : 指定建立的块装备文件存放路径,如:mkdevices /dev

              mknod : 建立装备文件

              mkrootdev : 建立根文件系统的装备节点  ,凭据内核通报参数当中的“root=”来建立对应该装备的节点  ,节点的名称是/dev /root  ,它不仅能够凭据root=/dev/xxx来天生对应的装备节点 ,还能够在遇到root=LABEL=/的情形下探测所有的硬盘分区  ,以便找到对应着卷标为/的分区 。

              pivot_root : 把挂载在 下的文件系统当成新的 / 文件系统 ,而当前的/文件系统被移动到

              raidautorun : 自动检测所有的raid装备

              showlabe12下一页