1. 程式人生 > >linux + busybox編譯以及在qemu中執行

linux + busybox編譯以及在qemu中執行

轉自我自己的人人

linux核心至少有兩種方式編譯執行。一種是在一個linux系統上編譯完成得到二進位制檔案以後,把原來的linux核心(也就是剛剛用來編譯新核心的系統)直接替換,執行。這樣可能出現一個問題:如果新的核心有bug導致奔潰,也許就很難再把核心檔案改回原來的版本了,不得不重灌。另外一種就是本文的思路:在虛擬機器中執行新的linux核心,不必修改原來的linux系統,避免對原來系統的大手術。

(背景知識,只想知道安裝過程可跳過此段)有同學可能會問busybox是什麼東西,為什麼會多出一個東西需要編譯?大家可能見過一個名字叫GNU/Linux,為什麼linux前面加一個GNU呢?因為linux只是一個光桿司令核心,他並沒有提供和使用者互動的UI,也就是說沒有滑鼠、視窗、按鈕,甚至沒有命令列介面。在 GNU/Linux 系統中,Linux 就是核心元件。而該系統的其餘部分主要是由 GNU 工程編寫和提供的程式組成。"因為單獨的 Linux 核心並不能成為一個可以正常工作的作業系統,所以我們更傾向使用 “GNU/Linux” 一詞來表達人們通常所說的 “Linux”"。大家使用的Ubuntu等發行版是在GNU/Linux的基礎上加入各種UI和功能。還是沒說到busybox是什麼。。。。其實他就是linux上的一個命令列介面外加各種附加工具的工具包。有了它我們才能在新編譯的linux上輸入命令,進行互動。

好了,開始編譯吧。以下步驟在linux環境下完成

在www.kernel.org   下載一個linux原始碼包,我下載的是3.17版本

安裝配置工具,命令列:sudo apt-get install libncurses5-dev

安裝qemu虛擬機器:sudo apt-get install qemu

cd (原始碼包所在的目錄)

tar xf ./linux-3.17.tar.bz2

cd linux-3.17

make menuconfig

這時會彈出一個花花綠綠的選單,這是各種linux的編譯選項。為了提高編譯速度,我們可以把network,usb相關的程式選擇不編譯,也可以試一下不編譯哪些模組linux還能執行。或者保險起見什麼也不動,直接exit,儲存。

接下來命令列make

…….

linux漫長的編譯,我花了45分鐘

然後是busybox的編譯

http://www.busybox.net/ 下載busybox, 我下載的是busybox-1.22.0

命令列:

cd (原始碼包所在的目錄)

tar xv busybox-1.22.0.tar.bz2
    cd busybox-1.22.0/
   make menuconfig
    這裡要注意了,在 Busybox Settings  --->   Build Options  --->的

               [*] Build BusyBox as a static binary (no shared libs)        這個選項必須要選上(讓他前面有個*號)

    然後exit儲存

然後命令列

make install

注意下檔案存放的位置,把linux-3.17和busybox-1.22.0兩個資料夾放在同一個資料夾裡(比如我放在了/home/menooker)

以/home/menooker資料夾為例,在/home/menooker新建一個文字檔案,命名makefs.sh。檔案管理器中右鍵之,屬性,許可權,允許作為執行檔案。右鍵檔案,編輯,在文字編輯器輸入

#!/bin/sh

 KERNEL=$(pwd)

BUSYBOX=$(find busybox* -maxdepth 0)

LINUX=$(find linux* -maxdepth 0)

#create filesystem

cd $BUSYBOX

mkdir -pv proc sys dev etc etc/init.d

cat << EOF > etc/init.d/rcS

#!/bin/sh

#mount -t proc none /proc

#mount -t sysfs none /sys

#/sbin/mdev -s

/sbin/umount -a

/sbin/mount -a

/sbin/mount -t ext3 remount rw /

EOF

chmod 777 ./etc/init.d/rcS

cd -

mkfs.ext3 -m0 /dev/ram1

mkdir /mnt/ram

mount /dev/ram1 /mnt/ram

cp $BUSYBOX/* /mnt/ram -r

cp $BUSYBOX/_install/* /mnt/ram -r

sleep 1

umount /dev/ram1

dd if=/dev/ram1 of=rootfs.img

#create zip img

cd $KERNEL

gzip -c rootfs.img > rootfs.img.gz

這個檔案可以生成虛擬機器需要的rom,把busybox包含在其中。

回到命令列,

cd /home/menooker

sudo ./makefs.sh

應該可以在/home/menooker裡看到rootfs.img這個檔案

最後就是運行了,命令:qemu-system-i386 -kernel ./linux-3.17/arch/i386/boot/bzImage -initrd rootfs.img.gz -append "root=/dev/ram rdinit=sbin/init noapic"

等待其boot,如果成功執行在最後可以看到以下介面

 

這個就是新核心的虛擬機器,接下來你可以輸入各種命令調戲它了

p.s. 我是在ubuntu的VMWare虛擬機器中作以上嘗試的,虛擬機器中跑qemu虛擬機器貌似也沒啥問題

p.s. 本文是我根據自己安裝過程的記憶寫的,難免出現疏漏,僅作參考

感謝網上大神們分享的關於linux編譯,image製作,qemu的相關經驗,本文參考了