2012年2月11日 星期六

吃盡苦頭編譯busybox(1)

小小的設定錯誤跟失誤讓人吃進苦頭orz

首先下載去下載busybox,真著把tarball解開後,進入目錄
make ARCH=arm CROSS_COMPILE=arm-linux- defconfig
這指令會載入default config,跟著自行定義需要的config
make ARCH=arm CROSS_COMPILE=arm-linux- menuconfig

我在menuconfig內只有多選了一個選項就是,把busybox打包成static library,這樣以後就不用考被一堆library了

[插曲]
因為兩個失誤害我編譯了好幾個小時跟做了好多測試
1. 把CROSS_COMPILE打成CROSS_COMPILER,make完全沒有抱怨,只是把它當成額外的巨集定義orz,測試了好久,qemu都跟我說init不能執行,因為x86的指令不能跑在arm上面阿~囧,隔了幾個小時才注意到
2. 在建立toolchain的時候沒有編譯large file support,這個會造成錯誤,我只好從新編譯toolchain,又花了好久的時間:P

跟著下
make ARCH=arm CROSS_COMPILE=arm-linux- install
這樣開始編譯,並且編譯完畢的檔案會被放到一個名為_install的目錄底下,可以注意到,指令只有差了後面參數的defconfig=>menuconfig=>install。另外一個有意思的觀察可以進入_install,然後下ls -la,可以發現所有的指令都是link到busybox這個檔案

接下進入_install目錄來打包一下root file system,用qemu測試能不能用,免得犯了跟我一樣的錯誤
find . | cpio -o --format=newc > ../rootfs.img
然後回到上一層目錄,把上次拷貝的zImage那個kernel拷貝過來,執行
qemu-system-arm -kernel zImage -initrd rootfs.img -append "root=/dev/ram rdinit=/bin/sh"

最後參數的意思是把init用/bin/sh取代,所以開機就會去執行/bin/sh,這時候應該會看到類似下面的畫面
參考資料
http://balau82.wordpress.com/2010/03/27/busybox-for-arm-on-qemu/

沒有留言:

張貼留言