mount initramfs 失敗 - Linux

Table of Contents

Greeting ,
我自己在 USB 中建立一個開機的系統(我不要使用 Livecd 的方式或者其他工具)
這個系統使用的是 Ubuntu 的套件,所我要自己

1. 劃分磁區
2. 安裝 Bootloader (Grub2)
3. 編譯安裝核心
4. 編譯安裝 root fs

以上都已經成功,說明如下:
----------------------------------------------
我成功的編譯 3.2.37 的 bzImage , 也成功的安裝好 grub2 ,
同時我也下載 ubuntu 12.04 的 rootfs,下載方式:

sudo debootstrap --arch=i386 --variant=minbase precise
/mnt/build/i386/ubuntu_12.04/ http://us.archive.ubuntu.com/ubuntu/

我使用過 chroot ,確認這個 rootfs 是可以工作的,如下:

mount -o bind /proc /mnt/build/i386/ubuntu_12.04/proc/
chroot /mnt/build/i386/ubuntu_12.04

現在我要將這個 rootfs 建立成為 initramfs ,指令:

find . | sudo cpio --format=newc -ov > ../rootfs.cpio.gz

好,現在我將這個檔案複製到 /dev/sdb1 (我的 USB 的第一個分割區)
這時我在去設定 grub config :

set root=(hd0,1)
menuentry "Ubuntu" {
linux /boot/bzImage rootfstype=ext4
root=/dev/ram0 real_root=/dev/sda1
initrd /rootfs.cpio.gz
}

然後我使用 sudo qemu-system-x86_64 -usb /dev/sdb 測試開機。
kernel 可以成功啟動,然後 kernel 會將剛剛的檔案解壓縮到 ram 中,
但是要執行 mount root時就失掉了,
我去追蹤了一下,死在 do_mount_root函數中的

int err = sys_mount(name, "/root", fs, flags, data);

這個函數是被 mount_block_root 函數所呼叫的,
我發現他傳入的 name是: /dev/root。可使我已經在 bootloader 中
傳入 root=/dev/ram0
為什麼還是去 mount /dev/root 呢?
請問是不是我什麼地方沒有做對 ? 難道 grub2 config 設定有錯嘛?

還請各位赐教,謝謝。



--

All Comments

Oscar avatarOscar2013-01-27
你如果是用initramfs,為什麼還要再去mount他呢?
一進到userspace時就在你產生的initramfs裡了啊
Frederica avatarFrederica2013-02-01
cpio格式的ramfs己經和/dev/ramX無關了
Vanessa avatarVanessa2013-02-05
Rosalind avatarRosalind2013-02-06
謝謝您的說明,我在去爬文試試看
Necoo avatarNecoo2013-02-07
我成功了,使用 qemu-system-x86_64 測試可以正常開機
Regina avatarRegina2013-02-07
改天我在 PO 文分享....