微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > arm gcc交叉编译工具链建立

arm gcc交叉编译工具链建立

时间:11-09 来源:互联网 点击:

。如果已经生成链接,则不必重新链接。

头文件到交叉编译工具链的安装目录:

[root@localhostasm]#mkdir –p $TARGET_PREFIX/include

[root@localhostasm]#cp –r $PRJROOT/kernel/linux-2.6.29/include/linux $TARGET_PREFIX/include

[root@localhostasm]#cp –r $PRJROOT/ kernel /linux-2.6.29/include/asm-arm$TARGET_PREFIX/include/asm

[root@localhostasm]#cp –r $PRJROOT/ kernel /linux-2.6.29/include/asm-generic$TARGET_PREFIX/include

root@localhostasm]#cp –r $PRJROOT/ kernel /linux-2.6.29/arch/arm/include/asm$TARGET_PREFIX/include

root@localhostasm]#cp –r $PRJROOT/ kernel /linux-2.6.29/arch/arm/mach-omap2/include/mach$TARGET_PREFIX/include/asm

Note: mach-xxx是根据目标板所用的cpu类型来选择的

1.1.5. 建立初始编译器(boot strap gcc)

这一步的目的主要是建立arm-linux-gcc工具,注意这个gcc没有glibc库的支持,所以只能用于编译内核、BootLoader等不需要C库支持的程序,后面创建C库也要用到这个编译器,所以创建它主要是为创建C库做准备,如果只想编译内核和BootLoader,那么安装完这个就可以到此结束。安装过程如下:

[root@localhostsetup-dir] #cd$PRJROOT/src-dir

[root@localhostsrc-dir]#tar jxvf ../setup-dir/gcc-4.4.4.tar.bz2

从GCC-4.3起,安装GCC将依赖于GMP-4.1以上版本和MPFR-2.3.2以上版本。如果将这两个软件包分别解压到GCC源码树的根目录下,并分别命名为"gmp"和"mpfr",那么GCC的编译程序将自动将两者与GCC一起编译。建议尽可能使用最新的GMP和MPFR版本。

[root@localhostsrc-dir]# tar jxvf ../setup-dir/mpfr-2.4.0.tar.bz2

[root@localhostsrc-dir]# tar jxvf ../setup-dir/gmp-4.2.tar.bz2

[root@localhostsrc-dir]#mv mpfr-2.4.0 gcc-4.4.4/mpfr

[root@localhostsrc-dir]#mv gmp-4.2.0 gcc-4.4.4/gmp

l因为是交叉编译器,还不需要目标板的系统头文件,所以需要使用--without-headers这个选项。否则会有很多*.h头文件找不到的报错

l--enable-language=c用来告诉配置脚本,需要产生的编译器支持何种语言,现在只需支持C语言。虽然配置为c,c++也可以的

l--disable-threads是因为threads需要libc的支持。

l--disable-decimal-float,需要libc的支持,而我们在初步编译的时候尚未生成libc,否则出现以下的报错:../gcc-4.3.1/libgcc/config/libbid/bid_decimal_globals.c:52:18:error: fenv.h: No such file or directory ../gcc-4.3.1/libgcc/config/libbid/bid_decimal_globals.c:In function __dfp_test_except:../gcc-4.3.1/libgcc/config/libbid/bid_decimal_globals.c:64:error: FE_INEXACT undeclared (first use in this function)../gcc-4.3.1/libgcc/config/libbid/bid_decimal_globals.c:64:error: (Each undeclared identifier is reported only once../gcc-4.3.1/libgcc/config/libbid/bid_decimal_globals.c:64:error: for each function it appears in.)

l --disable-shared,既然是第一次安装ARM交叉编译工具,那么本机的glibc支持的应该是本机的编译工具库,而不是ARM交叉编译工具库。forces GCC to link its internal libraries statically,没有这个选项,会有crti.o: No such file: No such file or directorycollect2: ld returned 1 exit status

注:由于没有arm的glibc,需要使用--disable-libmudflap--disable-libssp,禁止两个边界检查使用的库。

同样,由于第一次安装ARM交叉编译工具,那么支持的libc库的头文件也没有,src-dir/gcc-4.4.4/gcc/config/arm/t-linux文件,在TARGET_LIBGCC2_CFLAGS中添加两个定义:-Dinhibit_libc–D__gthr_posix_h

原文:

TARGET_LIBGCC2_CFLAGS= -fomit-frame-pointer –fPIC

改后:

TARGET_LIBGCC2_CFLAGS= -fomit-frame-pointer -fPIC-Dinhibit_libc -D_gthr_posix.h

编译:

[root@localhostsrc-dir]#cd $PRJROOT/build-dir/build-gcc

[root@localhostbuild-gcc]# ../../src-dir/gcc-4.4.4/configure --target=$TARGET --prefix=$PREFIX--without-headers --enable-languages=c --disable-shared --disable-threads--disable-decimal-float –disable-libmudflap –disable-lipssp

[root@localhostbuild-gcc]# make all-gcc

[root@localhostbuild-gcc]# make install-gcc

[root@localhostbuild-gcc]# make all-target-libgcc

[roo

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top