initramfs鏡像命令如何生成及運(yùn)行
生成initramfs鏡像命令
若鏡像根目錄為/initrd,執(zhí)行下面命令在當(dāng)前用戶(hù)主文件夾中生成myinitramfs.gz鏡像。
cd /initrd
find .|cpio -o -H newc|gzip>~/myinitramfs.gz
生成的鏡像文件是gzip壓縮過(guò)的。
如何運(yùn)行initramfs
如果第一章開(kāi)發(fā)工具學(xué)習(xí) 你會(huì)了的話,這是很好辦的事。首先要找一個(gè)內(nèi)核,自己編譯一個(gè)也可以,用現(xiàn)有l(wèi)inux系統(tǒng)內(nèi)核也可以,一般在/boot文件夾內(nèi)。
設(shè)置一個(gè)menu.lst加入對(duì)自己制作的initrd的啟動(dòng)項(xiàng),可以如下:
title my initramfs
root (hd0,0)
kernel /boot/vmlinuz
initrd /boot/myinitramfs.gz
boot
其中內(nèi)核和鏡像都放到了U盤(pán)的boot文件夾下了。
其實(shí)啟動(dòng)方法有很多,對(duì)于熟悉GRUB的人來(lái)說(shuō)這很簡(jiǎn)單,所以多了解一點(diǎn)GRUB還是很好的。
這樣的好處是不用重啟系統(tǒng),如果在linux中設(shè)置grub的話要重啟系統(tǒng),很費(fèi)時(shí)間。
生成initrd鏡像
下面是一個(gè)shell文件,可以自動(dòng)將/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
生成位置為當(dāng)前用戶(hù)主文件夾。
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是切換到真實(shí)系統(tǒng)的一個(gè)命令下面有詳細(xì)講述。下面是redhat鏡像中的所有文件的結(jié)構(gòu):
│ linuxrc
│
├─bin
│ insmod
│ nash
│
└─lib
BusLogic.o
ext3.o
jbd.o
scsi_mod.o
sd_mod.o