LinuxÄÚ´æ³õʼ»¯¼¼Êõ£¨initrd£©ÓÃÓÚÖ§³ÖÁ½½×¶ÎµÄϵͳÒýµ¼¹ý³Ì£¬ÊÇÔÚϵͳÆô¶¯¹ý³ÌÖб»¹ÒÔØµÄÁÙʱrootÎļþϵͳ£¨ÒëÕß×¢£ºÕâÀïµÄrootÎļþϵͳÊÇÖ¸µÄ¸ùÎļþϵͳ£©¡£initrd°üº¬ºÜ¶à¿ÉÖ´ÐгÌÐòºÍÇý¶¯£¬²¢ÔÊÐíÔÚÁÙʱµÄÄÚ´æ´ÅÅ̸ùÎļþϵͳ±»Ð¶ÔØ£¬ÄÚ´æ±»Êͷźó¹ÒÔØÕæÊµµÄrootÎļþϵͳ¡£ÔÚÐí¶àǶÈëʽLinuxÎļþϵͳÖУ¬initrdÊÇ×îÖյĸùÎļþϵͳ¡£ÕâÆªÎÄÕÂÖ÷Òª½²½âÁËlinux2.6Äں˵Äinitrd¼¼Êõ£¬°üÀ¨ÔÚÄÚºËÖеĴ´½¨¼°Ê¹Óᣠ1 ʲôÊÇÄÚ´æ´ÅÅ̳õʼ»¯£¿ initrd¹ÒÔØÓÅÏȼ¶¸ßÓÚÕæÊµ¸ùÎļþϵͳ£¬Ëü±»°î¶¨ÔÚÄÚºËÉÏ£¬×öΪÄÚºËÆô¶¯¹ý³ÌµÄÒ»²¿·Ö±»¼ÓÔØ£¨load£©¡£È»ºó£¬×öΪÁ½½×¶ÎÒýµ¼¹ý³ÌµÄµÚÒ»²¿·Ö£¬Äں˹ÒÔØ£¨mount£©initrd£¬ÓÃÓÚ»ñµÃ²¢¼ÓÔØÕæÊµÓÐЧµÄÎļþϵͳ¡£ ΪÁË´ïµ½Õâ¸öÄ¿µÄ£¬initrd°üº¬ÓÐ×îÆðÂëµÄĿ¼Óë³ÌÐò£¬ÀýÈçinsmod£¬À´°²×°ÄÚºËÄ£¿éµ½ÄÚºËÖС£ ¶ÔÓÚ×ÀÃæ»ò·þÎñÆ÷linux£¬initrdÊÇÁÙʱÎļþϵͳ£¬ËüµÄÉú´æÖÜÆÚºÜ¶Ì£¬½ö½öÊÇ×öΪµ½´ïÕæÊµ¸ùÎļþϵͳµÄÇÅÁº¡£µ«¶ÔÓÚûÓд洢É豸µÄǶÈëʽϵͳÀ´Ëµ£¬Ëü²ÅÊÇÓÀ¾ÃÐԵĸùÎļþϵͳ¡£±¾ÆªÎÄÕ¶ÔÕâÁ½·½Ãæ¾ùÓÐÉæ¼°¡£ 2 ÉîÈë·ÖÎöinitrdL initrd°üº¬ÓбØÐëµÄ³ÌÐòºÍϵͳÎļþ£¬ÓÃÓÚÖ§³ÖϵͳµÄÆô¶¯µÄµÚ¶þ½×¶Î¹ý³Ì¡£´´½¨³õʼ»¯ÄÚ´æµÄ·½·¨£¬ÊÇËæ×ÅÄãËùʹÓõÄϵͳ°æ±¾¶ø¸Ä±äµÄ¡£´ÓFedora Core3ÒÔºó£¬initrd¾ÍÓÉ»ØËÍÉ豸£¨loop device£©½¨Á¢¡£Ê²Ã´ÊÇ»ØËÍÉ豸£¿ËüÊÇÒ»¸öÉ豸Çý¶¯£¬ÔÊÐíÄ㽫һ¸öÎļþ¹ÒÔØÎª¿éÉ豸£¬²¢¶ÔÆäÎļþϵͳ×ö³öÃèÊö¡£Ò²Ðíloop device²¢²»´æÔÚÓëÄãµÄÄÚºËÖУ¬µ«ÊÇÄãÄܹ»Í¨¹ýÄں˵ÄÅäÖù¤¾ß£¨make menuconfig£©´ò¿ªËü¡£Â·¾¶ÊÇ£ºDevice Drivers-¡·Block Devices-¡·LoopBack Device support¡£ÏÂÃæÎª¼ì²éÃüÁ # mkdir temp ; cd temp
# cp /boot/initrd.img.gz .
# gunzip initrd.img.gz
# mount -t ext -o loop initrd.img /mnt/initrd
# ls -la /mnt/initrd
# |
ÏÖÔÚ£¬Äã¿ÉÒÔͨ¹ý²é¿´/mnt/initrdµÄ×ÓĿ¼À´²é¿´initrdµÄÄÚÈÝ¡£ÐèҪעÒâµÄÊÇ£¬¼´Ê¹ÄãµÄinitrd¾µÏñÎļþ²¢²»ÊÇÒÔ.gz×öΪºó׺Ãû£¬µ«ÊÇÄãͬÑù¿ÉÒÔͨ¹ýÔö¼Ó´Ëºó׺ÃûÀ´ÈÃgunzip´ò¿ªËü¡£ ´ÓFedora Core3¿ªÊ¼£¬Ä¬ÈϵÄinitrd¾µÏñ¾ÍÊÇÒ»¸öѹËõµÄgpio¹éµµÎļþ¡£³ýÁËÓùÒÔØÎļþµÄ·½Ê½ÒÔÍ⣬ÄãͬÑù¿ÉÒÔͨ¹ýcpio¹éµµµÄ·½Ê½À´½«Æä¹ÒÔØ³ÉʹÓÃÁË»ØËÍÉ豸µÄѹËõ¾µÏñ¡£Äã¿ÉÒÔͨ¹ýÒÔϵÄÖ¸ÁîÀ´¼ì²éÕâ¸öcpio¹éµµÎļþµÄÄÚÈÝ£º # mkdir temp ; cd temp
# cp /boot/initrd-2.6.14.2.img initrd-2.6.14.2.img.gz
# gunzip initrd-2.6.14.2.img.gz
# cpio -i --make-DirectorIEs < initrd-2.6.14.2.img |
Äã¿´µ½µÄ½á¹û½«ÊÇÒ»¸öСÐ͸ùÎļþϵͳ£¬ÈçÏÂËùʾ£º # ls -la
#
drwxr-xr-x 10 root root 4096 May 7 02:48 .
drwxr-x--- 15 root root 4096 May 7 00:54 ..
drwxr-xr-x 2 root root 4096 May 7 02:48 bin
drwxr-xr-x 2 root root 4096 May 7 02:48 dev
drwxr-xr-x 4 root root 4096 May 7 02:48 etc
-rwxr-xr-x 1 root root 812 May 7 02:48 init
-rw-r--r-- 1 root root 1723392 May 7 02:45 initrd-2.6.14.2.img
drwxr-xr-x 2 root root 4096 May 7 02:48 lib
drwxr-xr-x 2 root root 4096 May 7 02:48 loopfs
drwxr-xr-x 2 root root 4096 May 7 02:48 proc
lrwxrwxrwx 1 root root 3 May 7 02:48 sbin -> bin
drwxr-xr-x 2 root root 4096 May 7 02:48 sys
drwxr-xr-x 2 root root 4096 May 7 02:48 sysroot
# |
һЩСµÄ£¬µ«ÊǺÜÓбØÒªµÄ³ÌÐò×éºÏÄÜÔÚ./binĿ¼Ïµõ½£¬°üÀ¨nash£¨Ëü²»ÊÇÒ»¸öshell£¬¶øÊÇÒ»¸ö½Å±¾½âÊ͹¤¾ß£©£¬ÓÃÓÚ¼ÓÔØÄÚºËÄ£¿éµÄinsmod£¬ÒÔ¼°lvmµÈ¡£ ÉÏÃæËùʾĿ¼ÖУ¬Ïà¶Ô±È½ÏÓÐȤµÄÊÇrootĿ¼Ïµijõʼ»¯Îļþ¡£ÕâЩÎļþ£¬ºÍ´«Í³µÄlinuxÆô¶¯¹ý³ÌÖÐÒ»Ñù£¬ÊÇÔÚinitrd¾µÏñ±»½âѹËõµ½RAMÖÐʱÉú³ÉµÄ¡£´ý»áÎÒÃǽ«¼ÌÐøÌ½ÌÖÕâ¸öÎÊÌâ¡£ 3 ´´½¨initrdµÄ¹¤¾ß¡£ ÏÖÔÚ£¬ÈÃÎÒÃǻص½Ò»¿ªÊ¼µÄÌÖÂÛ£ºinitrdµÄ¾µÏñÊÇÈçºÎ±»´´½¨µÄ£¿ÔÚ´«Í³µÄlinuxϵͳÖУ¬initrdÊÇÔÚlinux buildµÄʱºò±»´´½¨µÄ¡£ÏñmkinitrdÕâÑùµÄÐíÐí¶à¶àµÄ¹¤¾ß£¬¶¼Äܹ»ÓÃÓÚͨ¹ý±ØÐëµÄ¿âºÍÄ£¿éÀ´×Ô¶¯¹¹½¨Ò»¸öÓÃÓÚ¹ý¶Éµ½ÕæÊµ¸ùÎļþϵͳµÄinitrd¡£ÊÂʵÉÏ£¬mkinitrd¹¤¾ßÊÇÒ»¸ö½Å±¾Îļþ£¬Òò´Ë£¬ÎÒÃÇÄܹ»ºÜÇå³þµÃ¿´µ½£¬Õâ¸ö¹ý³ÌÊÇÈçºÎ½øÐеġ£Í¬ÑùµÄ£¬YAIRD (Yet Another Mkinitrd)¹¤¾ß£¬Ò²ÔÊÐíÎÒÃÇ×Ô¶¨ÖÆÃ¿Ò»¸öinitrd±»¹¹½¨µÄ½×¶Î¡£ 4 ×Ô¼º¶¯ÊÖ£¬´òÔì×Ô¶¨ÒåµÄ³õʼ»¯ÄÚ´æÅÌ ÓÉÓںܶà»ùÓÚlinuxµÄǶÈëʽϵͳ¶¼Ã»ÓÐÓ²ÅÌÇý¶¯Æ÷£¬initrdÒ²¿ÉÒÔ×öΪÓÀ¾ÃÐԵĸùÎļþϵͳ¡£ÏÂÃæÎҾͽ«¸æËßÄãÃÇ£¬ÈçºÎ´´½¨Ò»¸öinitrd¾µÏñ¡£ÎÒʹÓõÄÊDZê×¼linux×ÀÃæÏµÍ³£¬Òò´Ë´ó¼Ò¼´Ê¹Ã»ÓÐǶÈëʽĿ±êÉ豸Ҳ¿ÉÒÔÕÕ×Å×ö¡£³ýÁ˽»²æ±àÒëÒÔÍ⣬ǶÈëʽĿ±êÎļþµÄ¹¹½¨¹ý³ÌÊÇÏàͬµÄ¡£ #!/bin/bash
# Housekeeping...
rm -f /tmp/ramdisk.img
rm -f /tmp/ramdisk.img.gz
# Ramdisk Constants
RDSIZE=4000
BLKSIZE=1024
# Create an empty ramdisk image
dd if=/dev/zero of=/tmp/ramdisk.img bs=$BLKSIZE count=$RDSIZE
# Make it an ext2 mountable file system
/sbin/mke2fs -F -m 0 -b $BLKSIZE /tmp/ramdisk.img $RDSIZE
# Mount it so that we can populate
mount /tmp/ramdisk.img /mnt/initrd -t ext2 -o loop=/dev/loop0
# Populate the filesystem (subDirectorIEs)
mkdir /mnt/initrd/bin
mkdir /mnt/initrd/sys
mkdir /mnt/initrd/dev
mkdir /mnt/initrd/proc
# Grab busybox and create the symbolic links
pushd /mnt/initrd/bin
cp /usr/local/src/busybox-1.1.1/busybox .
ln -s busybox ash
ln -s busybox mount
ln -s busybox echo
ln -s busybox ls
ln -s busybox cat
ln -s busybox ps
ln -s busybox dmesg
ln -s busybox sysctl
popd
# Grab the necessary dev files
cp -a /dev/console /mnt/initrd/dev
cp -a /dev/ramdisk /mnt/initrd/dev
cp -a /dev/ram0 /mnt/initrd/dev
cp -a /dev/null /mnt/initrd/dev
cp -a /dev/tty1 /mnt/initrd/dev
cp -a /dev/tty2 /mnt/initrd/dev
# Equate sbin with bin
pushd /mnt/initrd
ln -s bin sbin
popd
# Create the init file
cat >> /mnt/initrd/linuxrc << EOF
#!/bin/ash
echo
echo "Simple initrd is active"
echo
mount -t proc /proc /proc
mount -t sysfs none /sys
/bin/ash --login
EOF
chmod +x /mnt/initrd/linuxrc
# Finish up...
umount /mnt/initrd
gzip -9 /tmp/ramdisk.img
cp /tmp/ramdisk.img.gz /boot/ramdisk.img.gz |
Ïë´´½¨initrdµÄ»°£¬ÄãÐèÒªÊ×ÏÈ´´½¨Ò»¸ö¿ÕÎļþ£¬½«/dev/zero£¨0×Ö·ûÁ÷£©×öΪramdisk.imgµÄÊäÈë¡£µÃµ½µÄÎļþ´óС´óÔ¼ÊÇ4MB£¨ÓÐ4000¸ö1KµÄ¿é×é³É£©¡£½ÓÏÂÀ´£¬ÓÃmke2fsÃüÁîÀ´´´½¨Ò»¸öʹÓÃÕâ¸ö¿ÕÎļþµÄext2Îļþϵͳ¡£ÏÖÔÚ£¬Õâ¸öÎļþ¾ÍÊÇÒ»¸öext2Îļþϵͳ¡£ok£¬½ÓÏÂÀ´£¬ÒÔ»ØÂ·É豸µÄÐÎʽ¹ÒÔØÕâ¸öÎļþµ½/mnt/initrd£¬ÏÖÔÚ£¬Äã¾ÍÔÚ¹ÒÔØµãÓµÓÐÒ»¸ö´ú±í×Åext2ÎļþϵͳµÄĿ¼£¬²¢ÓÃÓë´æ·ÅÄãµÄinitrd¡£ÆäËû´ó¶àÊýµÄ½Å±¾Óï¾ä¶¼ÊÇÓÃÓÚʵÏÖÕâ¸ö¹¦ÄÜ¡£ ÏÂÒ»²½£¬¾ÍÊÇ´´½¨Ò»Ð©±ØÐëµÄ×ÓĿ¼£¬ÓÃÓÚÉú³ÉÄãµÄ¸ùÎļþϵͳ£º /bin, /sys, /dev, ºÍ /pro¡£ÕâÀïÖ»ÐèÒªÉÙÊý¼¸¸öĿ¼£¬ÀýÈ磬ûÓÐ/lib¡£µ«ÊÇËüÃÇÒѾ°üº¬Á˴󲿷ֹ¦ÄÜ¡£ Èç¹ûÏëÈÃÄãµÄ¸ùÎļþϵͳ·¢»Ó¸ü´óµÄ×÷Óã¬ÇëʹÓà BusyBox¡£Õâ¸ö¹¤¾ßÊÇÒ»¸ö°üº¬ÁËÐí¶à¶ÀÁ¢¹¤¾ßµÄ¾µÏñ£¬ÕâЩ¶ÀÁ¢µÄ¹¤¾ßÄã¶¼ÄÜÔÚlinuxÖÐÕÒµ½£¨ ash, aµÈµÈwk, sed, insmod£©¡£BusyBoxµÄÓÅÊÆÔÚÓÚ£¬Ëü°ÑËüÃǼ¯ºÏÔÚÁËÒ»Æð£¬²¢·ÖÏíÁ˹«ÓõIJ¿·Ö£¬´Ó¶ø¼«´óËõСÁ˾µÏñµÄÌå»ý¡ |