arm gcc交叉编译工具链建立
。如果已经生成链接,则不必重新链接。
头文件到交叉编译工具链的安装目录:
[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
armgcc交叉编译工具 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)