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

  • <dfn id="79stg"></dfn>
    <object id="79stg"><div id="79stg"><label id="79stg"></label></div></object>
    <ruby id="79stg"><dl id="79stg"><noscript id="79stg"></noscript></dl></ruby>

      新聞中心

      EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > arm交叉編譯環(huán)境搭建

      arm交叉編譯環(huán)境搭建

      作者: 時(shí)間:2016-11-21 來(lái)源:網(wǎng)絡(luò) 收藏
      arm交叉編譯環(huán)境搭建
      今天搭建了一個(gè)基于arm的嵌入式開(kāi)發(fā)環(huán)境,特記錄搭建過(guò)程及其中遇到的問(wèn)題。

      一:準(zhǔn)備
      1、使用的軟件版本
      kernel:(http://www.kernel.org/pub/linux/kernel/v2.4/)
      linux-2.4.21.tar.gz
      (patch下載地址:ftp://ftp.arm.linux.org.uk/pub/linux/arm/kernel/v2.4/)
      patch-2.4.21-rmk1.gz

      binutils:(ftp://ftp.gnu.org/gnu/binutils)
      binutils-2.14.tar.gz

      gcc:(ftp://ftp.gnu.org/gnu/gcc)
      gcc-core-2.95.3.tar.gz
      gcc-g++-2.95.3.tar.gz
      (patch下載地址:http://www.linuxfromscratch.org/patches/downloads/gcc/)
      gcc-2.95.3-2.patch
      gcc-2.95.3-no_fixinc-1.patch
      gcc-2.95.3-returntype_fix-1.patch

      glibc:(ftp://ftp.gnu.org/gnu/glibc)
      glibc-2.2.4.tar.gz
      glibc-linuxthreads-2.2.4.tar.gz

      gdb:(ftp://ftp.gnu.org/gnu/gdb)
      gdb-6.0.tar.bz2

      二:建立工作目錄
      #cd /
      #mkdir crosstool
      #mkdir linux-2.4.21 binutils gcc glibc gdb

      把下載的源代碼的壓縮文件放入對(duì)應(yīng)的文件夾:
      /crosstool/linux-2.4.21:linux-2.4.21.tar.gz、patch-2.4.21-rmk1.gz
      /crosstool/binutils: binutils-2.14.tar.gz
      /crosstool/gcc: gcc-core-2.95.3.tar.gz、gcc-g++-2.95.3.tar.gz、gcc-2.95.3-2.patch、gcc-2.95.3-no_fixinc-1.patch、gcc-2.95.3-returntype_fix-1.patch
      /crosstool/glibc: glibc-2.2.4.tar.gz 、glibc-linuxthreads-2.2.4
      /crosstool/gdb: gdb-6.0.tar.bz2

      三:建立二進(jìn)制工具
      #cd /crosstool/binutils
      #tar -xvzf binutils-2.14.tar.gz
      #cd binutils-2.14
      #mkdir build-arm-linux
      #../binutils-2.14/configure --target=arm-linux --prefix=/usr/local/arm/2.95.3
      #make
      #make install
      --target 選項(xiàng)是指出交叉工具的體系結(jié)構(gòu),所有運(yùn)行在主機(jī)上的交叉工具都要
      配置這個(gè)選項(xiàng)。
      --prefix 選項(xiàng)是指定路徑前綴,編譯完成之后,將安裝到這個(gè)目錄下。

      要使用這些工具,我們必須在 linux 的啟動(dòng)腳本中添加如下環(huán)境變量:
      #vi /etc/profile
      在 profile 文件中添加如下 PATH 環(huán)境變量:
      pathmunge /usr/local/arm/2.95.3/bin
      保存。
      使用source /etc/profile使修改生效。

      四:建立gcc編譯器(初始編譯器)
      #cd /crosstool/gcc
      #tar -xvzf gcc-core-2.95.3.tar.gz
      #tar –xvzf gcc-g++-2.95.3.tar.gz
      #cd gcc-2.95.3
      #patch -p1< ../gcc-2.95.3-2.patch
      #patch -p1< ../gcc-2.95.3-no_fixinc-1.patch
      #patch -p1< ../gcc-2.95.3-returntype_fix-1.patch

      配置 t-linux 文件。因?yàn)槲覀儸F(xiàn)在還沒(méi)有 glibc 庫(kù)的支持,所以需要簡(jiǎn)單配置一些簡(jiǎn)單的選項(xiàng)。對(duì)于arm-linux 工具可以通過(guò)修改
      /crosstool/gcc/gcc-2.95.3/gcc/config/arm/t-linux 配置文件。
      編輯 t-linux 文件,在文件末尾加入如下 2 行:
      #vim /crosstool/gcc/gcc-2.95.3/gcc/config/arm/t-linux
      TARGET_LIBGCC2-CFLAGS += -Dinhibit_libc -D__gthr_posix_h
      T_CFLAGS = -Dinhibit_libc -D__gthr_posix_h
      -Dinhibit_libc 的意思是禁止使用 libc,因?yàn)楝F(xiàn)在還沒(méi)有編譯出 glibc 庫(kù)。

      #mkdir build-arm-linux
      #cd build-arm-linux
      #../configure --target=arm-linux --prefix=/usr/local/arm/2.95.3 --with-headers=/crosstool/linux-2.4.21/linux-2.4.21/include --disable-shared –disable-threads –enable-languages="c"

      該編譯命令中:
      --target 指定交叉編譯工具的目標(biāo)體系結(jié)構(gòu)是 arm-linux
      --prefix 指定安裝路徑為/usr/local/arm/2.95.3
      --with-headers 指定內(nèi)核頭文件所在的路徑為:/crosstool/linux-2.4.21/linux-2.4.21/include
      --disable-shared 選項(xiàng)指定不使用共享庫(kù),這樣就不依賴 glibc 了
      --disable-threads 選項(xiàng)指定不使用線程,也就不使用線程庫(kù)了。
      --enable-languages 指定僅支持 c 語(yǔ)言

      #make
      在make的時(shí)候出現(xiàn)錯(cuò)誤,在/crosstool/gcc/gcc-2.95.3/gcc/config/arm目錄下的arm.c文件中,“arm_prog_mode = TARGET_APCS_32 ? PROG_MODE_PROG32 : PROG_MODE_PROG26;”句報(bào)錯(cuò)??梢詫⑵渥N。可以正常編譯。
      #make install

      五:生成glibc庫(kù)
      #cd /crosstool/glibc
      #tar -xvzf glibc-2.2.4.tar.gz
      #cd glibc-2.2.4
      #tar -xzvf ../glibc-linuxthreads-2.2.4.tar.gz
      #mkdir build-arm-linux
      #cd build-arm-linux
      #CC=arm-linux-gcc AS=arm-linux-as LD=arm-linux-ld ../configure --host=arm-linux --with-headers=/crosstool/linux-2.4.21/linux-2.4.21/include/ --enable-add-ons=linuxthreads –enable-shared --prefix=/usr/local/arm/2.95.3/arm-linux

      CC=arm-linux-gcc 是把 CC 變量設(shè)成你剛編譯生成的 arm-linux-gcc,用它來(lái)編譯你的glibc。
      --host 指定目標(biāo)板的體系結(jié)構(gòu)
      --with-headers 指定內(nèi)核頭文件的路徑為/crosstool/linux-2.4.21/linux-2.4.21/include
      --enable-add-ons=linuxthreads 支持線程庫(kù)。
      --enable-shared 選項(xiàng)支持共享庫(kù)
      --prefix 指定工具鏈目標(biāo)板相關(guān)文件的目錄

      #make
      #make install

      此時(shí)在/usr/local/arm/2.95.3/arm-linux 目錄下的 lib 等目錄中,安裝了 glibc共享庫(kù)等文件。然后修改/usr/local/arm/2.95.3/arm-linux/lib/目錄下的libc.so文件:

      #vim /usr/local/arm/2.95.3/arm-linux/lib/libc.so

      將“GROUP ( /usr/local/arm/2.95.3/arm-linux//lib/libc.so.6 /usr/local/arm/2.95.3/arm-linux//lib/libc_nonshared.a )”
      修改為
      “GROUP ( libc.so.6 libc_nonshared.a )”
      這樣連接程序 ld 就會(huì)在 libc.so 所在的目錄查找它需要的庫(kù),因?yàn)槟愕臋C(jī)子的/lib 目錄可能已經(jīng)裝了一個(gè)相同名字的庫(kù),一個(gè)為編譯可以在你的宿主機(jī)上運(yùn)行的程序的庫(kù),而不是用于交叉編譯的。

      如果不這樣修改,會(huì)在后面第六步建立g++編譯器的時(shí)候報(bào)錯(cuò)。(/crosstool/gcc/gcc-2.95.3/build-arm-linux/arm-linux/libiberty目錄下找不到Makefile文件。)
      出現(xiàn)編譯錯(cuò)誤問(wèn)題。

      六:建立全套編譯器(gcc和g++)
      #cd /crosstool/gcc/gcc-2.95.3

      首先,將我們添加的2行-Dinhibit_libc去掉,因?yàn)榇藭r(shí)不需要禁止使用libc了,我們?cè)诘?5 步中已經(jīng)生成了libc。
      #vim gcc/cpmfog/arm/t-linux

      然后,進(jìn)入 build-arm-linux 清除臨時(shí)目錄及臨時(shí)文件。
      #cd build-arm-linux
      #make distclean
      #rm –rf ./*

      #../configure –target=arm-linux --prefix=/usr/loacal/arm/2.95.3 --with-headers=/crosstool/linux-2.4.21/linux2.4.21/include --enable-threads=pthreads --enable-shared --enable-static --enable-languages="c,c++"
      #make
      #make install

      最后在/usr/loacal/arm/2.95.3/bin目錄多了arm-linux-g++ 、arm-linux-protoize 和 arm-linux-c++幾個(gè)文件

      七:驗(yàn)證交叉編譯工具
      #cd /crosstool/
      #mkdir test
      #cd test
      #vim helloworld.c

      #include

      int main(void)
      {
      printf("Hello World!n");
      return 0;
      }

      #arm-linux-gcc helloworld.c -o helloworld
      #file helloworld
      helloworld: ELF 32-bit LSB executable, ARM, version 1, dynamically linked (uses shared libs), for GNU/Linux 2.0.0, not stripped
      表示編譯了一個(gè)能在 arm 體系結(jié)構(gòu)下運(yùn)行的helloworld程序,說(shuō)明編譯工具做成功了。



      八:其它制作交叉編譯環(huán)境的方法
      1、使用的工具
      crosstool-0.43.tar.gz
      Download URL:http://kegel.com/crosstool/crosstool-0.43.tar.gz

      2、需要下載的源代碼(以制作arm-linux gcc-4.1.1為例子)
      binutils-2.16.1.tar.bz2
      Download URL:http://ftp.gnu.org/gnu/binutils/

      glibc-2.3.2.tar.bz2
      Download URL:http://ftp.gnu.org/gnu/glibc/

      glibc-linuxthreads-2.3.6.tar.bz2
      Download URL:http://ftp.gnu.org/gnu/glibc/

      linux-2.6.25.tar.bz2
      Download URL:http://ftp.kernel.org/pub/linux/kernel/v2.6/

      gdb-6.5.tar.bz2
      Download URL:http://ftp.gnu.org/gnu/gdb/

      gcc-4.1.1.tar.bz2
      Download URL:http://ftp.gnu.org/gnu/gcc/gcc-4.1.1/

      gcc-3.3.6.tar.bz2
      Download URL:http://ftp.gnu.org/gnu/gcc/gcc-3.3.6/

      linux-libc-headers-2.6.12.0.tar.bz2
      glibc-linuxthreads-2.3.2.tar.bz2

      3、注意事項(xiàng)
      您可以事先下載相關(guān)源代碼到本地機(jī)器,也可以不用下載,因?yàn)樵诰幾g的時(shí)候,會(huì)自動(dòng)下載相關(guān)的文件到本地文件夾。但是,那樣的話,編譯速度會(huì)很慢的。所以,這里推薦事先將這些源代碼給下載下來(lái)。
      編譯需要在非root用戶下才可以進(jìn)行。如果您是root用戶,請(qǐng)您切換到普通用戶模式。

      4、操作流程
      [test@localhost ~]$ echo $HOME
      /home/test
      [test@localhost ~]$ pwd
      /home/test
      [test@localhost ~]$

      可見(jiàn),當(dāng)前用戶為test,當(dāng)前所在目錄為/home/test。

      [test@localhost ~]$ mkdir download crosstool-4.1.1
      [test@localhost ~]$
      創(chuàng)建download 和 crosstool-4.1.1文件夾;然后將下載好的源代碼放置到download文件夾中。

      [test@localhost ~]$ tar -zxvf crosstool-0.43.tar.gz
      [test@localhost ~]$ cd crosstool-0.43
      [test@localhost crosstool-0.43]$
      解壓crosstool-0.43,然后進(jìn)入crosstool-0.43目錄。

      [test@localhost crosstool-0.43]$ vim demo-arm.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
      TARBALLS_DIR=/home/test/downloads
      #RESULT_TOP=/opt/crosstool
      RESULT_TOP=/home/test/crosstool-4.1.1
      export TARBALLS_DIR RESULT_TOP
      GCC_LANGUAGES="c,c++"
      export GCC_LANGUAGES

      ............

      #eval `cat arm.dat gcc-4.1.0-glibc-2.3.2.dat` sh all.sh --notest
      #eval `cat arm.dat gcc-4.1.0-glibc-2.3.2-tls.dat` sh all.sh --notest
      eval `cat arm.dat gcc-4.1.1-glibc-2.3.2.dat` sh all.sh --notest

      echo Done.

      *********************************************
      修改TARBALLS_DIR和RESULT_TOP的值,同時(shí)添加語(yǔ)句“eval `cat arm.dat gcc-4.1.1-glibc-2.3.2.dat` sh all.sh --notest”。
      TARBALLS_DIR:是下載的工具源碼壓縮包的存放目錄。
      RESULT_TOP :是要生成的工具鏈的存放目錄,要有寫權(quán)限的目錄,不然無(wú)法編譯。

      [test@localhost crosstool-0.43]$ vim gcc-4.1.1-glibc-2.3.2.dat
      *********************************************

      BINUTILS_DIR=binutils-2.16.1
      GCC_CORE_DIR=gcc-3.3.6
      GCC_DIR=gcc-4.1.1
      GLIBC_DIR=glibc-2.3.2
      LINUX_DIR=linux-2.6.25
      LINUX_SANITIZED_HEADER_DIR=linux-libc-headers-2.6.12.0
      GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.2
      GDB_DIR=gdb-6.5

      *********************************************
      將“LINUX_DIR=LINUX_DIR=linux-2.6.15.4”修改為“LINUX_DIR=LINUX_DIR=linux-2.6.25”;

      [test@localhost crosstool-0.43]$ vim arm.dat
      *********************************************

      KERNELCONFIG=`pwd`/arm.config
      TARGET=arm-linux
      TARGET_CFLAGS="-O"

      *********************************************
      將“TARGET=arm-unknown-linux-gnu”修改為“TARGET=arm-linux”

      [test@localhost crosstool-0.43]$ ./demo-arm.sh
      執(zhí)行編譯操作。生成的工具鏈在如下的位置:/home/test/crosstool-4.1.1/gcc-4.1.1-glibc-2.3.2,也就是我們剛才建立的crosstool-4.1.1文件夾中。

      九:后記
      那些組合可以編譯成功,可以參考:http://kegel.com/crosstool/crosstool-0.43/buildlogs/表格


      關(guān)鍵詞: arm交叉編譯環(huán)境搭

      評(píng)論


      技術(shù)專區(qū)

      關(guān)閉
      ×

      “芯”朋友见面大会
      珠海|11.14|泰克“芯”朋友见面大会珠海站|泰克带您从测试角度看半导体的整条产业链,快来报名抢位吧>>