第二課 建立嵌入式Linux開發環境之交叉編譯環境

來源:互聯網
上載者:User

上一次的內容我們主要講了如何在如何搭建一個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  轉載請註明出處

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.