ARM-Linux平臺的Busybox交叉編譯
http://blog.mcuol.com/User/lyusheng/Article/4797_1.htm
ARM-Linux平臺的Busybox 交叉編譯什麼是Busybox呢?
從名字上直接理解,Busybox是一個“繁忙的盒子”,其實,Busybox可以理解為一個Linux的命令集合,我們在進行Linux操作時所需要的 常用命令,都可以在Busybox裡找到,但Busybox又不是簡單的將所有的命令集合在一起,它採用了一種非常巧妙的方式,即“使用一個程式完成所有 的事”。
平時我們用ls、vi等命令,都要用到glibc的相關呼叫,所以如果每個命令都靜態連結這些呼叫,每個命令都會很大,因此在通常的發行版中,都會動態鏈 接glibc,可是glibc的動態庫本身就很大,這在PC+Linux平時上還可以接受,但在嵌入式系統中,這就太大了,而且又不是所有的庫函式都使 用。
一般採用兩種解決辦法,一種是裁剪glibc,另一種就是Busybox的辦法,即把ls、vi等程式的main函式改一下名,全部連結在一起,然後靜態 連結glibc,這樣,只有需要的呼叫才會連結進來,整個Busybox程式可能都比glibc的動態庫小。
因此,Busybox的工作原理是根據檔名來決定使用者想呼叫的是那個程式,例如,如果你的busybox程式的檔名是ls,執行的就是ls,是vi, 就執行vi。
下面介紹一下ARM-Linux平臺的Busybox-1.00交叉編譯與使用步驟:
1. 編譯Busybox
將檔案busybox-1.00.tar.gz拷貝到Linux服務的/home/work目錄,執行如下命令解壓檔案:
#tar xzvf AT91RM9200-busybox-1.00.tar.gz
當檔案解壓完成以後,會自動生成busybox-1.00目錄,進入該目錄,並執行如下命令進行編譯:
#make clean ;清除舊的編譯檔案
#make menuconfig
執行該命令以後,進入配置主選單。
首先進入選單Build Options,選擇“Do you want to
build BusyBox with a Cross Compiler?”選項,並在“Cross Compiler
prefix”欄中輸入交叉編譯器安裝的位置,如/usr/local/arm/2.95.3/bin/arm-linux-,注意最後是arm-
linux-,不能加其他字元或空格。
然後在“Any extra CFLAGS options for the
compiler”欄中輸入需要匹配的arm-linux系統原始碼目錄中標頭檔案所在的位置,如“/home/works/linux-2.4.27
/include”,然後退出返回主選單。
再根據系統需要,進入所需命令工具所在的子選單中,選擇相應的命令項。如需要“insmod”命令,就在“Linux Module
Utilities”子選單中選中。
選擇完成所需的全部命令後,儲存配置檔案退出,並執行如下命令進行編譯:
#make
#make install
當命令執行完畢以後,會在當前目錄中會生成“_install”目錄,進入該目錄,可以看到其中有四個子目錄:bin、linuxrc、sbin和
usr。
2. 將編譯結果加入ramdisk
在/home/work目錄下新建一個臨時目錄tmp,執行如下命令,將原有的ramdisk.gz解壓並掛載到該目錄下:
# gunzip ramdisk.gz
# mkdir tmp
# mount -o loop ramdisk tmp
然後執行如下命令,將_isntall目錄中的檔案拷貝到tmp目
錄,覆蓋ramdisk中的原有檔案:
# cp -af
/home/work/busybox-1.00/_install/* /home/work/tmp
拷貝完畢以後,使用系
統提供的映像檔案製作工具mkfs.jffs2,生成jffs2映像檔案,命令如下:
#
./mkfs.jffs2 -d ./tmp -o jffs2.img
然後執行如下命令,解除安裝並壓縮ramdisk.gz:
# umount /home/work/tmp
# gzip ramdisk
當以上操作全部
完成以後,即可生成新的ramdisk.gz和jffs2.img檔案。
注意:以上的部分操作步驟可能需要超級使用者的許可權。