生成initramfs鏡像命令
若鏡像根目錄為/initrd,執行下面命令在當前用戶主文件夾中生成myinitramfs.gz鏡像。
cd /initrd
find .|cpio -o -H newc|gzip>~/myinitramfs.gz
生成的鏡像文件是gzip壓縮過的。
如何運行initramfs
如果第一章開發工具學習 你會了的話,這是很好辦的事。首先要找一個內核,自己編譯一個也可以,用現有linux系統內核也可以,一般在/boot文件夾內。
設置一個menu.lst加入對自己制作的initrd的啟動項,可以如下:
title my initramfs
root (hd0,0)
kernel /boot/vmlinuz
initrd /boot/myinitramfs.gz
boot
其中內核和鏡像都放到了U盤的boot文件夾下了。
其實啟動方法有很多,對於熟悉GRUB的人來說這很簡單,所以多了解一點GRUB還是很好的。
這樣的好處是不用重啟系統,如果在linux中設置grub的話要重啟系統,很費時間。
生成initrd鏡像
下面是一個shell文件,可以自動將/initrd目錄下的文件打包成myinitrd.img鏡像。
#!/bin/sh
dd if=/dev/zero of=/dev/ram1
mke2fs -m 0 /dev/ram1
mount /dev/ram1 /mnt/ram
cp -R /initrd/* /mnt/ram
umount /dev/ram1
dd if=/dev/ram1 of=~/myinitrd.img
gzip -v9 ~/myinitrd.img
生成位置為當前用戶主文件夾。
RedHat的initrd
下面是鏡像中的linuxrc文件。
#!/bin/nash
echo "Loading scsi_mod.o module"
insmod /lib/scsi_mod.o
echo "Loading sd_mod.o module"
insmod /lib/sd_mod.o
echo "Loading BusLogic.o module"
insmod /lib/BusLogic.o
echo "Loading jbd.o module"
insmod /lib/jbd.o
echo "Loading ext3.o module"
insmod /lib/ext3.o
echo Mounting /proc filesystem
mount -t proc /proc /proc
echo Creating block devices
mkdevices /dev
echo Creating root device
mkrootdev /dev/root
echo 0x0100 > /proc/sys/kernel/real-root-dev
echo Mounting root filesystem
mount -o defaults --ro -t ext3 /dev/root /sysroot
pivot_root /sysroot /sysroot/initrd
umount /initrd/proc
pivot_root是切換到真實系統的一個命令下面有詳細講述。下面是redhat鏡像中的所有文件的結構:
│ linuxrc
│
├─bin
│ insmod
│ nash
│
└─lib
BusLogic.o
ext3.o
jbd.o
scsi_mod.o
sd_mod.o