筆者所用的是一塊ARM9 Atmel 9200的開發板,Linux核心為2.4.27, 交叉編譯器為2.95.3,編譯環境為RedHat9 Linux下。
1、從http://www.busybox.net/downloads下載到busybox,筆者下載的為busybox1.1.3,下載後解壓到一個目錄下,如 /tmp 目錄下;
2、進入解壓後的目錄,輸入make menuconfig 進行編譯配置,基本的配置如下:
Busybox Settings >
General Configuration >
[*] Support for devfs
Build Options >
[*] Build BusyBox as a static binary (no shared libs)
/* 將busybox編譯為靜態串連,少了啟動時找動態庫的麻煩 */
[*] Do you want to build BusyBox with a Cross Compiler?
(/usr/local/arm/3.3.2/bin/armlinux)
Cross Compiler prefix
/* 指定交叉編譯工具路徑 */
Init Utilities >
[*] init
[*] Support reading an inittab file
/* 支援init讀取/etc/inittab設定檔,一定要選上 */
Shells >
Choose your default shell (ash) >
/* (X) ash 選中ash,這樣產生的時候才會產生bin/sh檔案
* 看看我們前頭的linuxrc指令碼的頭一句:
* #!/bin/sh 是由bin/sh來解釋執行的*/
[*] ash
Coreutils >
[*] cp
[*] cat
[*] ls
[*] mkdir
[*] echo (basic SuSv3 version taking no options)
[*] env
[*] mv
[*] pwd
[*] rm
[*] touch
Editors >
[*] vi
Linux System Utilities >
[*] mount
[*] umount
[*] Support loopback mounts
[*] Support for the old /etc/mtab file
Networking Utilities >
[*] inetd
/* 支援inetd超級伺服器inetd的設定檔為/etc/inetd.conf檔案,
* "在該部分的4: 相關設定檔的建立"一節會有說明*/
3、編譯並安裝Busybox
[arm@localhost busybox1.1.3]$make TARGET_ARCH=arm CROSS=/usr/local/arm/2.85.3/bin/arm-linux- PREFIX=/root/arm_9200/rdmnt/ all install
CROSS 為交叉編譯器的路徑。
PREFIX指明安裝路徑:就是我們根檔案系統所在路徑。
* 這裡需要注意一點的是,只要install busybox,我們根檔案系統下先前建好的linuxrc就會被覆蓋為一同名二進
制檔案。所以要事先備份我們自己的linuxrc,在安裝完busybox後,將linuxrc複製回去就好。
* 如果在編譯的過程中出現錯誤,這可能是某些支援問題,可以在配置的時候把相關的選項去掉試試。
* 如果出現找不到核心版本號碼的編譯錯誤,可以有兩種方法解決:(1)把你的核心源碼中的version.h檔案拷貝到交叉編譯器的包含檔案的linux目錄下(該方法筆者實驗成功);(2)該方法來源於論壇上面的一位朋友,做法為刪掉#include <linux/version.h>換成#define UTS_RELEASE "2.4.27" #define LINUX_VERSION_CODE 132123