1. 程式人生 > >ARM-Linux平臺的Busybox交叉編譯

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檔案。
注意:以上的部分操作步驟可能需要超級使用者的許可權。