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