由于嵌入式设备的系统资源不如PC那样的富裕,所以在嵌入式设备上提供编译环境非常困难,所以一般在开发主机上进行编辑、编译链接等,然后在目标机上运行,这个过程就叫做交叉编译。编译器是运行在宿主机上(通常都是x86架构的PC机),而编译出来的代码使运行在目标机上的(向我们的arm架构)。
下面讲解交叉编译工具链的安装(这里仅仅讲解安装过程,编译工具链是一个很复杂的过程,网上教程也铺天盖地)。
1.解压工具链的压缩包
如我进入/home/linux下创建目录:
mkdir corss_tool
然后解压我们的工具链
tar xvf gcc-4.6.4.tar.xz
2.添加环境变量
首先说下/etc/bash.bashrc和/etc/profile的区别:
打开一个新的shell(包括打开一个新终端和在终端上输入bash),都会重新读取/etc/bash.bashrc 和 ~/.bashrc文件里面的内容。
而Linux启动登录时会读取/etc/profile和~/.profile文件的内容。所以,在测试的时候,重启登录时会读取/etc/profile和~/.profile文件的内容(此时并不读取/etc/bash.bashrc和~/.bashrc文件)。然后再打开终端时,会去读取/etc/bash.bashrc和 ~/.bashrc文件。这就出现了那种结果。
所以,我们可以在/etc/bash.bashrc或者/etc/profile中添加内容:
export PATH=$PATH:/home/linux/corss_tool/gcc-4.6.4/bin
然后,重启配置文件使得配置生效:
source /etc/bash.bashrc
(或source /etc/bash.bashrc )
3.测试工具链
执行:
arm-none-linux-gnueabi-gcc–v
显示如下信息表示安装成功:
Using built-in specs.
COLLECT_GCC=arm-none-linux-gnueabi-gcc
COLLECT_LTO_WRAPPER=/home/david/Exynos4412/toolchain/gcc-4.6.4/bin/../libex
ec/gcc/arm-arm1176jzfssf-linux-gnueabi/4.6.4/lto-wrapper
Target: arm-arm1176jzfssf-linux-gnueabi
Configured with: /work/builddir/src/gcc-4.6.4/configure --build=i686-build_pc-linux-gnu
--host=i686-build_pc-linux-gnu --target=arm-arm1176jzfssf-linux-gnueabi
--prefix=/opt/TuxamitoSoftToolchains/arm-arm1176jzfssf-linux-gnueabi/gcc-4.6.4
--with-sysroot=/opt/TuxamitoSoftToolchains/arm-arm1176jzfssf-linux-gnueabi/gcc-4.6.4
/arm-arm1176jzfssf-linux-gnueabi/sysroot --enable-languages=c,c++
--with-arch=armv6zk --with-cpu=arm1176jzf-s --with-tune=arm1176jzf-s --with-fpu=vfp
--with-float=softfp --with-pkgversion='crosstool-NG hg+default-2685dfa9de14 - tc0002'
--disable-sjlj-exceptions --enable-__cxa_atexit --disable-libmudflap --disable-libgomp
--disable-libssp --disable-libquadmath --disable-libquadmath-support
--with-gmp=/work/builddir/arm-arm1176jzfssf-linux-gnueabi/buildtools
--with-mpfr=/work/builddir/arm-arm1176jzfssf-linux-gnueabi/buildtools
--with-mpc=/work/builddir/arm-arm1176jzfssf-linux-gnueabi/buildtools
--with-ppl=/work/builddir/arm-arm1176jzfssf-linux-gnueabi/buildtools
--with-cloog=/work/builddir/arm-arm1176jzfssf-linux-gnueabi/buildtools
--with-libelf=/work/builddir/arm-arm1176jzfssf-linux-gnueabi/buildtools
--with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm'
--enable-threads=posix --enable-target-optspace --without-long-double-128 --disable-nls
--disable-multilib
--with-local-prefix=/opt/TuxamitoSoftToolchains/arm-arm1176jzfssf-linux-gnueabi/gcc-
4.6.4/arm-arm1176jzfssf-linux-gnueabi/sysroot --enable-c99 --enable-long-long
Thread model: posix
gcc version 4.6.4 (crosstool-NG hg+default-2685dfa9de14 - tc0002)