奶奶個熊,搞了好幾個晚上,被一個愚蠢的錯誤給害死了,沒有編譯成靜態檔案,跑起來後提示:no init file。
其實整個過程挺簡單的,就是細節沒有注意到。我寫成了指令碼(僅參考,工作還不OK),供大家參考:
#!/bin/bash#為了不影響其它,建立一個目錄來進行我們的工作mkdir kerneldbgcd kerneldbg#利用git版本管理系統,下載linux核心源碼.git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git#利用git版本管理系統,下載busybox源碼git clone git://busybox.net/busybox.git#檢查系統是否有安裝QEMU,如果沒有則要求安裝之dpkg -l | grep qemuif [ $? eq 1 ] echo "Please install qemu first!" echo "Usage: sudo apt-get install qemu"fi#先編譯busybox.編譯前需要將busybox設定為靜態連結.否則,哼,害死你@#你可以通過make menuconfig來手動設定.cd busyboxif [ -f .config ] sed "CONFIG_STAIC=y" #修改為靜態編譯,此為示意代碼!else echo "missing .config, please \"make menuconfig\" first"fi#編譯busybox,然後安裝,會在目前的目錄下產生一個_install目錄makemake install#接著要進入到linux目錄cd ..cd linux-stable#進行必要的配置後make bzImage#建立磁碟鏡像dd if=/dev/zero of=rootfs.img bs=1M count=20#格式化磁碟mkfs.ext3 rootfs.img#建立rootfs目錄,用來掛載rootfs.imgmkdir rootfs#掛載rootfs.imgsudo mount -o loop rootfs.img rootfs#將busybox產生的_install目錄下的內容全部copy到rootfs目錄下.#這其實就是所謂的根檔案系統cp -rv ./busybox/_install/* ./rootfs#建立系統啟動必要的裝置檔案 cd rootfssudo mknod rootfs/dev/console c 5 1sudo mknod rootfs/dev/ram b 1 0#將linux編譯產生的bzImage拷貝過來cd ..cp ./linux-stable/arch/x86/boot/bzImage#啟動qemu,同時裝載剛才產生的根檔案系統及核心檔案qemu -hda ./rootfs.img -kernel ./bzImage -append "root=/dev/sda"