使用sourcery g++ lite建立交叉编译环境

[ARM笔记/cross-tool]使用sourcery g++ lite建立交叉编译环境  

2012-03-06 20:45:41|  分类: ARM |字号 订阅

1. 获取编译器
       我们自己可以编译制作一个交叉编译工具链(Cross-compile Toolchain)来用,但为了方便、稳定起见,我们大多数时候会去选择成熟的第三方工具链。codesourcery的交叉工具链是很常见的一种,以ARM为例,我们可以从codesourcery 处下载到最新的版本。
       可以看到有4个OS平台版本可供选择,如图1,那么该选择哪一个下载呢?

图1

       在codesourcery的一个页面上我们找到了答案:

        This table applies to the target system on which your applications will run, not to the host system on which you run Sourcery G++.

Target Platform Description
EABI/ELF RTOS systems or bare metal systems where no operating system is present. These configurations should not be used to build Linux kernels or applications.
uClinux? Systems running uClinux, i.e. Linux on CPUs without an MMU. Use Sourcery G++ to build both the uClinux kernel and applications.
GNU/Linux? Systems running full Linux, i.e., Linux on CPUs with an MMU. Use Sourcery G++ to build both the Linux kernel and applications.
Microsoft Windows?

Systems running Microsoft Windows 2000, or later.

        也就是说,如果打算用来编译linux kernel或者基于linux的应用程序,则应该选择GNU/Linux;EABI/ELF适用于没有操作系统(或者RTOS)的裸机;uClinux适用于没有MMU的Linux。

        其中 IA32 GNU/Linux TAR 是制作好的编译器,Source TAR是源码,我们下载制作好的编译器,同时还得下载datasheet和用户手册(started Guide(pdf))。注:datasheet 是介绍Gcc和Glibc的版本号,用户手册是介绍怎么使用。
       我们下载 IA32 GNU/Linux TAR  :这是制作好的交叉编译器,比如:
arm-2010.09-50-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2

2.配置编译器
1)解压刚下载的压缩文件
$ tar jvxf arm-2010.09-50-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
       则产生一个arm-2010.09目录,进入目录。
       编译器二进制文件全在/bin目录下面。
2)编译器参数设置
       该编译器支持三种版本的cpu,分别是armv4t、armv5t和armv7t。默认支持的是armv5t的cpu。由于本人的开发板是 tq2440.属于armv4t的cpu。所以在编译的时候需要设置相应的参数。对应的命令是:arm-none-linux-gnueabi-gcc -march=armv4t $* filename
       为了方便采用tq手册中的方法。在/bin目录下面建立若干个可执行脚本,分别命名为:arm-linux-xxx(xxx代表的就是同目录下的arm-none-linux-gnueabi-xxx中的xxx) 然后在脚本文件中添加如下内容:
#!/bin/sh
exec arm-none-linux-gnueabi-xxx -march=armv4t $*
       注意:实际上只要对gcc gcc-4.5.1 和g++这三个制作可执行脚本就可以了。而针对其他的使用命令:ln -s arm-none-linux-gnueabi-xxx arm-linux-xxx 做成链接指向对应的编译器就可以了。
       这是新建的arm-linux-gcc脚本
$ cat arm-linux-gcc
#!/bin/sh
exec arm-none-linux-gnueabi-gcc -march=armv4t $*
       然后我们需要弄明白两件事情:
*      我们所需要的交叉编译器的库(lib)的路径是:arm-none-linux-gnueabi/libc/armv4t/lib/目录下的,我们制作的文件系统就是使用该目录下的库;
*      我们所需要的头文件在arm-none-linux-gnueabi/libc/usr/include/目录下的。
       如果以后遇到某程序需要的库,自行编译后添加到编译器中就可以了。到此适合我们的交叉编译器的初步制作算是结束了,然后我们可以将其打包备份。


然后我们需要高明白两件事情:

1、                       我们所需要使用的交叉编译器的库(lib)的路径是:arm-none-linux-gnueabi/libc/armv4t/lib/目录下的,我们制作文件系统是就是使用该目录下的库;

2、                       我们所需要使用的头文件在arm-none-linux-gnueabi/libc/usr/include/目录下的。

然后我们添加编译QT所必须的库:jpegser.v6.tar.gz、libpng、libz和libuuid(e2fprogs),我们在一直好这些库之后,需要将其拷贝到前面提到的目录中(包括lib和include)。

如果以后遇到某程序需要的库,自行编译后添加到编译器中就可以了。到此适合我们的交叉编译器的初步制作算是结束了,然后我们可以将其打包备份。

3)环境变量配置

配置文件在 /etc/enviroment
  1.

  1. sudo cp /etc/enviroment /etc/environmet.old

  2.

  1. sudo vim /etc/enviroment
  2. 修改如下:我们添加了 /home/ywx/arm-cross/arm-2010.09/bin,因为我们解压文件到了/home/ywx/arm-corss下

  3. PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/ywx/arm-cross/arm-2010.09/bin:"

 

重启环境变量或重启计算机就好了。我们需要重启计算机


如此:自己制作的编译器就制作成功了。当要注意的一定,这个编译支持EABI技术的,所以要求编译的目标内核也要支持这个技术,linux2.6.16以后的内核都支持了。之前的交叉编译器不支持EABI技术。


你可能感兴趣的:(使用sourcery g++ lite建立交叉编译环境)