学习啦>学习电脑>操作系统>Linux教程>

initramfs镜像命令如何生成及运行

时间: 若木635 分享

  生成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

75382