萬盛學電腦網

 萬盛學電腦網 >> Linux教程 >> initramfs鏡像命令如何生成及運行

initramfs鏡像命令如何生成及運行

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

copyright © 萬盛學電腦網 all rights reserved