學(xué)習(xí)啦>學(xué)習(xí)電腦>操作系統(tǒng)>Linux教程>

initramfs鏡像命令如何生成及運(yùn)行

時(shí)間: 若木635 分享

  生成initramfs鏡像命令

  若鏡像根目錄為/initrd,執(zhí)行下面命令在當(dāng)前用戶主文件夾中生成myinitramfs.gz鏡像。

  cd /initrd

  find .|cpio -o -H newc|gzip>~/myinitramfs.gz

  生成的鏡像文件是gzip壓縮過的。

  如何運(yùn)行initramfs

  如果第一章開發(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盤的boot文件夾下了。

  其實(shí)啟動(dòng)方法有很多,對(duì)于熟悉GRUB的人來說這很簡單,所以多了解一點(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)前用戶主文件夾。

  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

75382