對BUSYBOX還不夠了解,目前爲止,我認爲BUSYBOX就是一個編譯好的小工具集合。可以簡單的通過mount的方法將這些小工具
加載到嵌入式linux中。這種方法就省去了逐個安裝的工作量。
這次嘗試在Qemu中加載BUSYBOX的過程。參考的blog來自於http://balau82.wordpress.com/2010/03/27/busybox-for-arm-on-qemu/
1. 下載busybox
wget http://www.busybox.net/downloads/busybox-1.16.1.tar.bz2
2. 解壓縮
tar -xjvf busybox-1.16.1.tar.bz2
3. 設置busybox
cd busybox-1.16.1/
make ARCH=arm CROSS_COMPILE=arm-linux-uclibcgnueabi- defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-uclibcgnueabi- menuconfig
根據blog上的說法,這裏在“Busybox Settings --> Build Options“裏面選擇了靜態編譯(不使用動態鏈接庫)。個人猜測只是爲了方便。
4. 生成install文件夾
make ARCH=arm CROSS_COMPILE=arm-linux-uclibcgnueabi- install
5. 編譯過程的options選擇
錯誤1: 交叉編譯工具需要支持大文件系統,以及寬字符。所以重新編譯了buildroot。
錯誤2: 文件lineedit.c中找不到mstate_t,解決方法是加入頭文件#include "wchar.h"
錯誤3: mtd/mtd-user.h找不到,解決方法 cp /usr/include/mtd/ ./include/ -a
(參考http://www.qiangsoft.com/blog/?cat=11)
錯誤4: error: #error "You need to build uClibc with UCLIBC_HAS_RPC for NFS support"。重新編譯吧。
太好了,終於編譯完成。
6. 生成啓動鏡像
cd _install
find . | cpio -o --format=newc > ../rootfs.img
cd ..
gzip -c rootfs.img > rootfs.img.gz
7. 用Qemu進行測試
qemu ./busybox ls -l
編譯正確的話可以列出文件中所有的目錄
8. 還有一種方法是用Qemu啓動busybox的編譯結果,這個我測試後發覺rootfs.img需要用NFS server的方法導入,過於複雜,沒有繼續了。