新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > Linux 系統下ARM Linux交叉編譯環境crosstool工具

        Linux 系統下ARM Linux交叉編譯環境crosstool工具

        作者: 時間:2016-11-09 來源:網絡 收藏
        Linux系統下ARM Linux交叉編譯環境的建立目前流行的有三種途徑。

        一、使用別人編譯好的開發工具鏈

        本文引用地址:http://www.104case.com/article/201611/317983.htm

        cross-2.95.3.tar.bz2

        arm-linux-gcc-3.3.2.tar.bz2

        arm-elf-tools-20030314.sh。

        其中arm-elf-tools是專門用來編譯uclinux內核的。我們常用的cross-cross-2.95.3,下載cross-2.95.3.tar.bz2解壓后放到/usr/local/arm目錄下設置下PATH即可使用,這是最方便快捷的方式,缺點是cross-2.95.3 GCC版本是2.95.3,版本較低,不能編譯2.6版本的Linux內核和版本較高的u-boot。cross-2.95.3.tar.bz2一般是交叉編譯2.4的linux內核的,而arm-linux-gcc-3.3.2.tar.bz2一般是交叉編譯2.6版本的內核的。

        二、自己動手慢慢編譯。

        這個方法是最麻煩的,需要下載很多源文件,步驟多比較繁瑣,成功率不高,極其容易出錯,即使是經驗豐富程序員,自己編譯一套完整的工具鏈也是很難成功的。

        三、建立交叉編譯工具的途徑是使用crosstool-0.43或buildroot來編譯。

        如果是基于gcc和glibc來制作工具鏈,則使用crosstool來編譯,如果要基于gcc和uClibc來制作工具鏈,可以使用buildroot來進行編譯。

        uClibc比glibc小,在已有的接口上是兼容的,更適合嵌入式系統,單uClibc沒包括glibc中的所以的接口實現。

        使用crosstool工具(crosstool-0.43.tar.gz)

        $tar zxvf crosstool-0.43.tar.gz

        $cd crosstool-0.43

        $cp glibc-2.3.6-version-info.h_err.patchcrosstool-0.43/patches/glibc-2.3.6/

        /* glibc-2.3.6-version-info.h_err.patch為補丁程序*/

        打開腳本demo-arm-softfloat.sh(具體使用那個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/downloads/*表示源碼存放的位置*/

        RESULT_TOP=/opt/crosstool/*表示編譯結果存放的位置*/

        export TARBALLS_DIR RESULT_TOP

        GCC_LANGUAGES="c,c++"/*表示制作出的工具鏈支持C、C++語言,如果想支持其他語言可以在里面增加如java可以GCC_LANGUAGES="c,c++,java"*/

        export GCC_LANGUAGES

        # Really, you should do the mkdir before running this,

        # and chown /opt/crosstool to yourself so you dont need to run as root.

        mkdir -p $RESULT_TOP/*建立目錄*/

        #eval `cat arm-softfloat.dat gcc-2.95.3-glibc-2.1.3.dat` sh all.sh --notest

        #eval `cat arm-softfloat.dat gcc-2.95.3-glibc-2.2.2.dat` sh all.sh --notest

        #eval `cat arm-softfloat.dat gcc-2.95.3-glibc-2.2.5.dat` sh all.sh --notest

        #eval `cat arm-softfloat.dat gcc-3.2.3-glibc-2.2.5.dat` sh all.sh --notest

        #eval `cat arm-softfloat.dat gcc-3.2.3-glibc-2.3.2.dat` sh all.sh --notest

        #eval `cat arm-softfloat.dat gcc-3.2.3-glibc-2.3.2-tls.dat` sh all.sh --notest

        #eval `cat arm-softfloat.dat gcc-3.3.6-glibc-2.2.2.dat` sh all.sh --notest

        #eval `cat arm-softfloat.dat gcc-3.3.6-glibc-2.2.5.dat` sh all.sh --notest

        #eval `cat arm-softfloat.dat gcc-3.3.6-glibc-2.3.2.dat` sh all.sh --notest

        #eval `cat arm-softfloat.dat gcc-3.3.6-glibc-2.3.2-tls.dat` sh all.sh --notest

        #eval `cat arm-softfloat.dat gcc-3.4.5-glibc-2.2.5.dat` sh all.sh --notest

        #eval `cat arm-softfloat.dat gcc-3.4.5-glibc-2.3.5.dat` sh all.sh --notest

        eval `cat arm-softfloat.dat gcc-3.4.5-glibc-2.3.6.dat` sh all.sh --notest

        /*這個是會生成的版本、注意gcc-3.4.5-glibc-2.3.6.dat、arm-softfloat.dat和all.sh他們是三個相關的shell文件,下面分別介紹*/

        echo Done.

        1、demo-arm-softfloat.sh中修改

        TARBALLS_DIR=/work/tools/create_crosstools/src_gcc_glibc/*修改源碼存放的位置,包括gcc-3.4.5-glibc-2.3.6.dat所包含的所有包,如果可以上網,執行$ ./demo-arm-softfloat.sh后可以自行下載*/

        RESULT_TOP=/opt/crosstool/*修改編譯結果存放的位置*/

        2、arm-softfloat.dat

        KERNELCONFIG=`pwd`/arm.config

        TARGET=arm-softfloat-linux-gnu/*編譯出來的樣式為arm-softfloat-linux-gnu,把它修改成TARGET=arm-linux,編譯出來的樣式為arm-linux-gcc、arm-linux-ld等*/

        TARGET_CFLAGS="-O"

        GCC_EXTRA_CONFIG="--with-float=soft"

        GLIBC_EXTRA_CONFIG="--without-fp"

        3、all.sh

        PREFIX=${PREFIX-$RESULT_TOP/$TOOLCOMBO/$TARGET}

        修改成

        PREFIX=${PREFIX-$RESULT_TOP/$TOOLCOMBO}

        /*把原來最終結果存放在/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux下改為/work/tools/gcc-3.4.5-glibc-2.3.6/*/

        其中TARGET在arm-softfloat.dat定義的

        4、gcc-3.4.5-glibc-2.3.6.dat

        BINUTILS_DIR=binutils-2.15

        GCC_DIR=gcc-3.4.5

        GLIBC_DIR=glibc-2.3.6

        LINUX_DIR=linux-2.6.8 (可以修改內核版本)

        LINUX_SANITIZED_HEADER_DIR=linux-libc-headers-2.6.12.0

        GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.6

        GLIBC_EXTRA_CONFIG="$GLIBC_EXTRA_CONFIG --with-tls --with-__thread--enable-kernel=2.4.18"

        以上所提到的就是生成交叉編譯器所需要的壓縮包的版本。

        5、進入crosstool-0.43

        $ cd crosstools-0.43

        $ ./demo-arm-softfloat.sh

        /*執行,經過2、3小時后在/work/tools/目錄下生成gcc-3.4.5-glibc-2.3.6子目錄,交叉編譯器、庫、頭文件都在里面,設置PATH環境變量即可*/

        $ arm-linux-gcc –v/*測試*/

        可能的錯誤:
        ubuntu中默認gcc的版本是,對于crosstools0.43而言gcc可能太新了。
        解決的辦法很簡單:裝個gcc4.1,然后把/usr/bin/gcc的link由gcc4.2指向4.1即可。
        sudoapt-getinstallgcc-4.1
        ls-l/usr/bin/gcc#你可以看看現在的gcc指向哪里
        sudorm/usr/bin/gcc
        sudoln-s/usr/bin/gcc-4.1/usr/bin/gcc
        附錄: 
        binutils是二進制文件的處理工具,它主要包含了一些輔助開發工具,例如,objdump顯示反匯編碼、nm列出符號表、readelf顯示elf文件信息及段信息、strip將不必要的代碼去掉以減少可執行文件大小等。這些工具在嵌入式開發初期,尤其是在移植調試操作系統時非常有用。 
          gcc是編譯工具,用來編譯內核代碼的工具,使用它可以編譯匯編語言和c語言的程序,生成arm的代碼。 
          glibc是鏈接和運行庫,它的編譯需要指定編譯器為arm交叉編譯器,否則編譯出的glibc代碼將會是同時有arm和x86代碼的混合體。所有需要用到的工具都可以通過下載源碼自行編譯,然后在宿主機上進行安裝,就可以建立起arm的交叉編譯環境。


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 宾阳县| 陇西县| 文化| 麦盖提县| 岳阳市| 黄梅县| 海南省| 永胜县| 九龙坡区| 龙游县| 荣成市| 开鲁县| 奇台县| 岚皋县| 缙云县| 昌黎县| 和平县| 旌德县| 大英县| 丹东市| 郓城县| 乐都县| 定襄县| 莱西市| 临高县| 清涧县| 正蓝旗| 兰西县| 蒙阴县| 夏邑县| 周口市| 萨迦县| 嵩明县| 白水县| 湛江市| 南丰县| 栾城县| 达日县| 枣庄市| 巴林右旗| 桑日县|