在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > Linux 系統(tǒng)下ARM Linux交叉編譯環(huán)境crosstool工具

            Linux 系統(tǒng)下ARM Linux交叉編譯環(huán)境crosstool工具

            作者: 時(shí)間:2016-11-09 來(lái)源:網(wǎng)絡(luò) 收藏
            Linux系統(tǒng)下ARM Linux交叉編譯環(huán)境的建立目前流行的有三種途徑。

            一、使用別人編譯好的開(kāi)發(fā)工具鏈

            本文引用地址:http://www.biyoush.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是專(zhuān)門(mén)用來(lái)編譯uclinux內(nèi)核的。我們常用的cross-cross-2.95.3,下載cross-2.95.3.tar.bz2解壓后放到/usr/local/arm目錄下設(shè)置下PATH即可使用,這是最方便快捷的方式,缺點(diǎn)是cross-2.95.3 GCC版本是2.95.3,版本較低,不能編譯2.6版本的Linux內(nèi)核和版本較高的u-boot。cross-2.95.3.tar.bz2一般是交叉編譯2.4的linux內(nèi)核的,而arm-linux-gcc-3.3.2.tar.bz2一般是交叉編譯2.6版本的內(nèi)核的。

            二、自己動(dòng)手慢慢編譯。

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

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

            如果是基于gcc和glibc來(lái)制作工具鏈,則使用crosstool來(lái)編譯,如果要基于gcc和uClibc來(lái)制作工具鏈,可以使用buildroot來(lái)進(jìn)行編譯。

            uClibc比glibc小,在已有的接口上是兼容的,更適合嵌入式系統(tǒng),單uClibc沒(méi)包括glibc中的所以的接口實(shí)現(xiàn)。

            使用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為補(bǔ)丁程序*/

            打開(kāi)腳本demo-arm-softfloat.sh(具體使用那個(gè)sh文件根據(jù)硬件確定)

            #!/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/*表示編譯結(jié)果存放的位置*/

            export TARBALLS_DIR RESULT_TOP

            GCC_LANGUAGES="c,c++"/*表示制作出的工具鏈支持C、C++語(yǔ)言,如果想支持其他語(yǔ)言可以在里面增加如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

            /*這個(gè)是會(huì)生成的版本、注意gcc-3.4.5-glibc-2.3.6.dat、arm-softfloat.dat和all.sh他們是三個(gè)相關(guān)的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所包含的所有包,如果可以上網(wǎng),執(zhí)行$ ./demo-arm-softfloat.sh后可以自行下載*/

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

            2、arm-softfloat.dat

            KERNELCONFIG=`pwd`/arm.config

            TARGET=arm-softfloat-linux-gnu/*編譯出來(lái)的樣式為arm-softfloat-linux-gnu,把它修改成TARGET=arm-linux,編譯出來(lái)的樣式為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}

            /*把原來(lái)最終結(jié)果存放在/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 (可以修改內(nèi)核版本)

            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、進(jìn)入crosstool-0.43

            $ cd crosstools-0.43

            $ ./demo-arm-softfloat.sh

            /*執(zhí)行,經(jīng)過(guò)2、3小時(shí)后在/work/tools/目錄下生成gcc-3.4.5-glibc-2.3.6子目錄,交叉編譯器、庫(kù)、頭文件都在里面,設(shè)置PATH環(huán)境變量即可*/

            $ arm-linux-gcc –v/*測(cè)試*/

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


            評(píng)論


            技術(shù)專(zhuān)區(qū)

            關(guān)閉