搭建嵌入式交叉编译环境

分享到:
           

    搭建交叉编译环境是嵌入式开发的第一步,也是关键的一步。不同的体系结构、不同的操作内容甚至是不同版本的内核,都会用到不同的交叉编译器。选择交叉编译器非常重要,有些交叉编译器经常会有部分的BUG,都会导致最后的代码无法正常运行。

    交叉编译器完整的安装一般涉及多个软件的安装(读者可以从ftp://gcc.gnu.org/pub/下载),包括binutils、gcc、glibc、glibc-linuxthreads等软件。其中,binutils主要用于生成一些辅助工具,如readelf、objcopy、objdump、as、ld等;gcc是用来生成交叉编译器的,主要生成arm-linux-gcc交叉编译工具(应该说,生成此工具后已经搭建起交叉编译环境,可以编译Linux内核了,但由于没有提供标准用户函数库,用户程序还无法编译);glibc主要是提供用户程序所使用的一些基本的函数库,glibc-linuxthreads是线程相关函数库。这样,交叉编译环境就完全搭建起来了。

    上面所述的搭建交叉编译环境比较复杂,很多步骤都涉及对硬件平台的选择。因此,现在嵌入式平台社区或厂商一般会提供在各种平台上测试通过的交叉编译器,或把以上安装步骤全部写入脚本文件或者以发行包的形式提供,这样就大大方便了用户的使用。

    这里采用广泛使用的cross-4.3.2交叉编译器工具链,其使用方法非常简单。

    $ mkdir –p /usr/local/arm /* 这是交叉编译器安装目录*/
    $ cp cross-4.3.2.bar.bz2 /usr/local/arm
    $ cd /usr/local/arm
    $ tar jxvf cross-4.3.2.tar.gz

    此时在/usr/local/arm/4.3.2/bin/下已经出现了很多交叉编译工具,显示如下:

    arm-none-linux-gnueabi-addr2line      arm-none-linux-gnueabi-gfortran
    arm-none-linux-gnueabi-ar             arm-none-linux-gnueabi-gprof
    arm-none-linux-gnueabi-as             arm-none-linux-gnueabi-ld
    arm-none-linux-gnueabi-c++            arm-none-linux-gnueabi-ldd
    arm-none-linux-gnueabi-cc             arm-none-linux-gnueabi-nm
    arm-none-linux-gnueabi-c++filt        arm-none-linux-gnueabi-objcopy
    arm-none-linux-gnueabi-cpp            arm-none-linux-gnueabi-objdump
    arm-none-linux-gnueabi-ct-ng.config   arm-none-linux-gnueabi-populate
    arm-none-linux-gnueabi-g++            arm-none-linux-gnueabi-ranlib
    arm-none-linux-gnueabi-gcc            arm-none-linux-gnueabi-readelf
    arm-none-linux-gnueabi-gcc-4.3.2      arm-none-linux-gnueabi-run
    arm-none-linux-gnueabi-gccbug         arm-none-linux-gnueabi-size
    arm-none-linux-gnueabi-gcov           arm-none-linux-gnueabi-sstrip
    arm-none-linux-gnueabi-gdb            arm-none-linux-gnueabi-strings
    arm-none-linux-gnueabi-gdbtui         arm-none-linux-gnueabi-stri

    可以看到,这个交叉编译工具集成了binutils、gcc、glibc这几个软件,而每个软件也都有比较复杂的配置信息。

    接下来,在环境变量PATH中添加路径,就可以直接使用arm-none-linux—gnueabi-gcc命令了。

    $ export PATH=$PATH:/usr/local/arm/4.3.2/bin

    把交叉开发工具链的路径添加到环境变量PATH中,这样可以方便地在Bash或者Makefile中使用这些工具。通常环境变量的配置文件有如下几个。
    ● profile类文件:用户第一次登录时仅运行一次,profile类文件包括每个用户主目录下的.profile文件和/etc/profile等。用户再次登录时就会运行主目录下的.profile文件的脚本。
    ● bashrc类文件:每当打开bash shell时(如当打开一个虚拟终端时)运行该脚本文件。bash类文件包括每个用户主目录下的.bashrc文件和/etc/bash.bashrc等。

    把环境变量配置的命令添加到其中一个文件中即可。

    $ arm-linux-gcc –v /*查看交叉编译器的版本信息*/
    arm-none-linux-gnueabi-gcc -v
    Using built-in specs.
    Target: arm-none-linux-gnueabi
    Configured with: /home/linux/crosstooll/toolchain_build/targets/src/gcc-4.3.2/configure --build=i686-build_pc-linux-gnu --host=i686-build_pc-linux-gnu --target=arm-none-linux-gnueabi --prefix=/usr/local/arm/4.3.2 --with-sysroot=/home/linux/toolchain/arm-none-linux-gnueabi//sys-root --enable-languages=c,c++,fortran --disable-multilib --with-arch=armv4t --with-cpu=arm9tdmi --with-tune=arm920t --with-float=soft --with-pkgversion=crosstool-NG-1.8.1-farsight --disable-sjlj-exceptions --enable-__cxa_atexit --disable-libmudflap--with-gmp=/home/linux/crosstooll/toolchain_build/targets/arm-none-linux-gnueabi/build/static--with-mpfr=/home/linux/crosstooll/toolchain_build/targets/arm-none-linux-gnueabi/build/static--enable-threads=posix--enable-target-optspace--with-local-prefix=/home/linux/toolchain/arm-none-linux-gnueabi//sys-root --disable-nls --enable-symvers=gnu--enable-c99 --enable-long-long
    Thread model: posix
    gcc version 4.3.2

    从上面打印的版本信息中可以看到“--prefix=/usr/local/arm/ 4.3.2”,这就是交叉编译器安装的路径。它是在编译前通过prefix选项配置的,所以,这个工具链安装的路径必须是/usr/local/arm/4.3.2。

    本文选自华清远见嵌入式培训教材《从实践中学嵌入式Linux应用程序开发》

   热点链接:

   1、构建嵌入式Linux交叉开发环境
   2、嵌入式培训资料:搭建交叉编译环境
   3、嵌入式交叉编译过程详解
   4、嵌入式linux入门六步走
   5、典型嵌入式Linux系统设置

更多新闻>>