ARM Linux平台的Busybox交叉編譯

2021-05-22 14:56:51 字數 2137 閱讀 3194

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檔案。

注意:以上的部分操作步驟可能需要超級使用者的許可權。

搭建arm linux開發平台

在網上找了很多資料,才建立了自己的linux開發平台,這裡要感謝網路上的大牛們提供的資料,讓我少走了很多彎路,現在把我 搭建平台的步驟說明如下,主要是給自己乙個備份,呵呵。先介紹一下我使用的開發平台 開發板使用 帶s3c2440cpu的開發板,linux2.6 pc機上安裝的是ubuntu10.10...

在ARM Linux平台上移植SQLite

在arm linux平台上移植sqlite 首先從http sqlite.org 的quick start文件中的測試程式為例對移植到arm linux上的sqlite3進行測試。該程式清單如下 include include static int callback void notused,int...

Qt5 3 2在ARM Linux平台的移植

3 指定交叉編譯器 修改配置檔案 home qt qt everywhere opensource src 5.3.2 qtbase mkspecs linux arm gnueabi g qmake.conf qmake configuration for building with arm li...