嵌入式培训资料:搭建交叉编译环境

分享到:
           

    搭建交叉编译环境是嵌入式开发的第一步,也是关键的一步。不同的体系结构、不同的操作内容甚至是不同版本的内核,都会用到不同的交叉编译器。选择交叉编译器非常重要,有些交叉编译器经常会有部分的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是线程相关函数库。这样,交叉编译环境就完全搭建起来了。

    上面所述的搭建交叉编译环境比较复杂,很多步骤都涉及到对硬件平台的选择。因此,现在嵌入式平台社区或厂商一般会提供在各种平台上测试通过的交叉编译器,而且也有很多把以上安装步骤全部写入脚本文件或者以发行包的形式提供,这样就大大方便了用户的使用。例如,crosstool是美国人Dan Kegel开发的一套可以自动编译不同版本的交叉编译器,关于该工具的使用请参考同一系列的教材“嵌入式系统技术与设计”。

    在本文中采用广泛使用的cross-3.3.2交叉编译器工具链,其使用非常简单。

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

    此时在/usr/local/arm/3.3.2/bin/下已经出现了很多交叉编译工具。用户可以查看arm文件夹下的VERSIONS文件,显示如下:

    Versions
    gcc-3.3.2
    glibc-2.3.2
    binutils-head
    Tool chain binutils configuration:
    ../binutils-head/configure …
    Tool chain glibc configuration:
    ../glibc-2.3.2/configure …
    Tool chain gcc configuration
    ../gcc-3.3.2/configure …

    可以看到,这个交叉编译工具确实集成了binutils、gcc、glibc这几个软件,而每个软件也都有比较复杂的配置信息,读者可以查看VERSIONS文件了解相关信息。

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

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

    把交叉开发工具链的路径添加到环境变量PATH中,这样可以方便地在Bash或者Makefile中使用这些工具。通常可以在环境变量的配置文件有几个:

    (1)profile类文件:用户登录时第一次仅运行一次,profile类文件包括每个用户主目录下的.profile文件和/etc/profile等。哪个用户登录就会运行主目录下的.profile文件的脚本。

    (2)bashrc类文件:每当打开bash shell时(例如,当打开一个虚拟终端时)运行改脚本文件。bash类文件包括每个用户主目录下的.bashrc文件和/etc/bash.bashrc等。

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

    $ arm-linux-gcc –v /*查看交叉编译器的版本信息*/
    Reading specs from /usr/local/arm/3.3.2/lib/gcc-lib/arm-linux/3.3.2/ specs Configured
    with: ../gcc-3.3.2/configure
    --target=arm-linux --with-cpu=strongarm1100
    --prefix=/usr/local/arm/3.3.2
    i686-pc-linux-gnu --with-headers=/work/kernel.h3900/include
    --enable-threads=pthreads --enable-shared --enable-static --enable-languages=c,c++
    Thread model: posix
    gcc version 3.3.2

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


   热点链接:

   1、什么是嵌入式系统
   2、嵌入式系统的硬件架构
   3、嵌入式Linux开发学习
   4、六种常见嵌入式操作系统
   5、嵌入式linux入门要学什么

更多新闻>>