• <acronym id='5kj9k'><em id='5kj9k'></em><td id='5kj9k'><div id='5kj9k'></div></td></acronym><address id='5kj9k'><big id='5kj9k'><big id='5kj9k'></big><legend id='5kj9k'></legend></big></address>

    <i id='5kj9k'></i>
    <dl id='5kj9k'></dl>

    <span id='5kj9k'></span>
    <i id='5kj9k'><div id='5kj9k'><ins id='5kj9k'></ins></div></i>
  • <ins id='5kj9k'></ins>

    <code id='5kj9k'><strong id='5kj9k'></strong></code>

          <fieldset id='5kj9k'></fieldset>
        1. <tr id='5kj9k'><strong id='5kj9k'></strong><small id='5kj9k'></small><button id='5kj9k'></button><li id='5kj9k'><noscript id='5kj9k'><big id='5kj9k'></big><dt id='5kj9k'></dt></noscript></li></tr><ol id='5kj9k'><table id='5kj9k'><blockquote id='5kj9k'><tbody id='5kj9k'></tbody></blockquote></table></ol><u id='5kj9k'></u><kbd id='5kj9k'><kbd id='5kj9k'></kbd></kbd>

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

            • 时间:
            • 浏览:4
            • 来源: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下一页