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文件。
注意:以上的部分操作步驟可能需要超級用戶的權限。

發佈了6 篇原創文章 · 獲贊 0 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章