上一次的內容我們主要講了如何在如何搭建一個Linux
開發環境,這次我們就要根據不同的目標平台,建立自己的ARM-Linux的交叉編譯環境。
搭建交叉編譯環境的方法有很多,不同的體繫結構、不同的操作內容甚至不同的核心版本,都會用到不同的交叉編譯器。比如uboot,kernel,檔案系統需要的編譯環境各不相同。所以,選擇合適的交叉編譯器對於嵌入式
開發是非常重要的。一般一個完整的交叉編譯器涉及到多個軟體,主要包括binutils、gcc、glibc等。其中,binutils主要產生一些協助工具輔助;gcc是用來產生交叉編譯器,主要產生arm-linux-gcc交叉編譯工具,耳glibc主要提供使用者程式所需要的一些基本函數庫。
看起來交叉編譯環境的搭建比較複雜,所以一般的開發板公司附帶的光碟片上基本上都附帶了編譯好的交叉編譯器,一般的版本為2.95.3、3.3.2和
3.4.1。2.95.3一般用於編譯Linux2.4核心,3.3.2用來編譯Linux3.3.2核心的。一般這些編譯器都經過測試,而且和配套的開
發板能夠很好的吻合,所以初學時基本上不需要配置直接可以使用。當然,由於時間的滯後性,這些編譯器往往不是最新的,需要新版本時,往往是催著開發板廠商推出新版本^_^,所以這裡我們介紹兩種方法來搭建arm-linux調試環境。
方法一:使用現成的交叉編譯器
使用現成的交叉編譯器比較簡單,一般的開發板都帶有幾個不同版本的arm-linux工具鏈,如樣創的開發版編譯核心用的是3.4.1的版本。
1.解壓工具鏈到指定目錄,以樣創的為例。
ssh登陸後,將arm-linux-gcc-3.4.1.tar.bz2通過ssh內建的檔案傳輸工具傳輸到Linux,並通過tar命令解壓。
命令如下:
mkdir /usr/local/arm //ssh登陸操作必須要有寫入權限,或者直接以root登陸
tar -xjvf arm-linux-gcc-3.4.1.tar.bz2 -C /
-C / :
的意識是解壓到指定目錄,這裡指跟目錄,由於該壓縮包內部的目錄結構本身包含usr/local/arm,所以解壓到根目錄實際上就是把檔案解壓到/usr/local/arm檔案夾下。
2.環境變數的設定
設定環境變數,我們可以把剛才的路徑產生的路徑輸出,我們這裡使用的是bash設定檔,他的作用是每次登陸或開啟shell時自己執行的檔案。當然你也可以不用,除非你願意每次開啟的時候都export一下環境變數。
在
/etc/bashrc
檔案後面加入路徑:(如果是ubuntu,修改
/etc/bash.bashrc
,或者/etc/bash.bashrc.local
)
PATH=$PATH:/usr/local/arm/3.4.1/bin
OK, 在SSH(終端)上輸入命令arm-linux-gcc --version,可查看GCC的版本。
arm-linux-gcc.jpg
(15.92 KB)2008-5-14 10:21
同樣的方法可以建立多個版本的工具鏈,具體使用時修改bash
設定檔即可。
註:在終端或SSH視窗編輯檔案,我們通過VI命令,檔案的開發命令為 VI 檔案名稱。
如,我們要編輯/etc/bashrc的檔案,命令為
VI /etc/bashrc
主要用到的幾個命令:
:q //不儲存退出
:wq //儲存退出
i //插入
ESC //在命令方式和編輯方式中切換
我們需要在bashrc後添加語句 PATH=$PATH:/usr/local/arm/3.4.1/bin的方法為:
1. VI /etc/bashrc
2. 移動游標到檔案最後,然後按i鍵進入插入模式
3. 斷行符號後,輸入 PATH=$PATH:/usr/local/arm/3.4.1/bin
4. 按ESC鍵切換到命令模式(如果不知道現在是什麼模式可多按幾下^_^)
5. 按 :qw(注意有冒號),儲存退出
6. 如果不確定有沒有修改成功,可以通過 cat /etc/bashrc 命令查看
方法二:自己搭建新的交叉編譯環境
我們可以通過crosstool工具方便的搭建交叉編譯環境。crosstool是由美國人Dan Kegel(畢業於加(利福尼亞)州工學院)開發的一套可以自動編譯不同匹配版本gcc和glibc,並作測試的指令碼程式。
http://kegel.com/crosstool/crosstool-0.43.tar.gz
在http://kegel.com/crosstool/crosstool-0.43/buildlogs/
可以看到各種CPU和GCC+Glibc版本那些已經編譯成功,那些部分成功,那些徹底失敗。如果你不是編譯器開發人員,就按著上面做吧。
你也可以到ttp://kegel.com/crosstool/#download
看看是否有更新的版本。
第一步:確認Linux主機有以下幾個工具:
bison、flex、build-essential
我安裝的是Fedora
8,這些工具基本上都有了。
第二步:安裝解壓crosstool工具
(SSH以21iee登陸後,將crosstool-0.4.3.tar.gz 直接上傳)
tar -xzvf crosstool-0.43.tar.gz
//解壓
第三步:進入crosstool檔案夾,可以看到很多.sh
指令碼和.dat
設定檔。由於我們採用的開發目標系統為S3C2440,所以我們選用demo-arm9tdmi.sh
。內容如下
#!/bin/sh
# This script has one line for each known working toolchain
# for this architecture. Uncomment the one you want.
# Generated by generate-demo.pl from buildlogs/all.dats.txt
set -ex
TARBALLS_DIR= /home/21iee/arm/source
RESULT_TOP= /home/21iee/arm/crosstool
//TARBALLS_DIR是工具源碼壓縮包的存放的目錄,我們將需要的源碼包放這裡。
//RESULT_TOP是要產生的工具鏈的存放目錄,需要有寫入權限,不然無法編譯。
export TARBALLS_DIR RESULT_TOP GCC_LANGUAGES= "c,c++"
export GCC_LANGUAGES # Really, you should do the mkdir before running this ,
# and chown / opt/ crosstool to yourself so you don
't need to run as root. mkdir -p $RESULT_TOP
#eval `cat arm9tdmi.dat gcc-3.2.3-glibc-2.2.5.dat` sh all.sh --notest #eval `cat arm9tdmi.dat gcc-3.2.3-glibc-2.3.2.dat` sh all.sh --notest #eval `cat arm9tdmi.dat gcc-3.2.3-glibc-2.3.2-tls.dat` sh all.sh --notest #eval `cat arm9tdmi.dat gcc-3.3.6-glibc-2.2.5.dat` sh all.sh --notest #eval `cat arm9tdmi.dat gcc-3.3.6-glibc-2.3.2.dat` sh all.sh --notest #eval `cat arm9tdmi.dat gcc-3.3.6-glibc-2.3.2-tls.dat` sh all.sh --notest #eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.2.5.dat` sh all.sh --notest #eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.3.2.dat` sh all.sh --notest #eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.3.2-tls.dat` sh all.sh --notest #eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.3.5.dat` sh all.sh --notest #eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.3.5-tls.dat` sh all.sh --notest #eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.3.6.dat` sh all.sh --notest #eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.3.6-tls.dat` sh all.sh --notest #eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.2.dat` sh all.sh --notest #eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.2-tls.dat` sh all.sh --notest #eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.5.dat` sh all.sh --notest #eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.5-tls.dat` sh all.sh --notest #eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.6.dat` sh all.sh --notest #eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.6-tls.dat` sh all.sh --notest #eval `cat arm9tdmi.dat gcc-4.1.0-glibc-2.3.2.dat` sh all.sh --notest eval `cat arm9tdmi.dat gcc-4.1.0-glibc-2.3.2-tls.dat` sh all.sh --notest
//上面表示要選工具鏈的版本號碼!"#"起注釋功能!可以選擇一行!
echo Done.
|
第四步:下載相應的源碼包到${TARBALLS_DIR}
目錄中。如上表選用
的是eval `cat arm9tdmi.dat gcc-4.1.0-glibc-2.3.2-tls.dat` sh all.sh --notest
,開啟
arm9tdmi.dat gcc-4.1.0-glibc-2.3.2-tls.dat
,其內容如下:
BINUTILS_DIR=binutils-2.16.1
GCC_CORE_DIR=gcc-3.3.6
GCC_DIR=gcc-4.1.0
GLIBC_DIR=glibc-2.3.2
LINUX_DIR=linux-2.6.15.4
LINUX_SANITIZED_HEADER_DIR=linux-libc-headers-2.6.12.0
GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.2
GDB_DIR=gdb-6.5
GLIBC_EXTRA_CONFIG="$GLIBC_EXTRA_CONFIG --with-tls --with-__thread --enable-kernel=2.4.18"
|
到網上去下載紅色標記的相應版本的.bz2源碼包,下載後存放到${TARBALLS_DIR}
目錄下。注意:在Windows下有些下載軟體下載的bz2包會有問題,建議在IE下直接右鍵另存新檔(我用迅雷下的有幾個包不能解壓,折騰我半天,暈)
最後,進入crosstool-0.43目錄,輸入./demo-arm9tdmi.sh開始編譯。然後差不多可以睡個午覺,如果編譯沒出錯的話,差不多一個小時後在你的toolchains目錄中看到你想要的工具鏈了。
然後把改路徑加入到PATH,就可以工作了(方法同上)
作者:hztour 轉載請註明出處