在Fedora18下用cross-ng1.9.3建立arm-linux交叉编译环境在s3c6410上使用

来源:互联网 发布:linux mac地址 编辑:程序博客网 时间:2024/06/05 20:16

一.环境
虚拟机:Fedora18
主机:window7
开发板:s3c6410
二.在fedaro18的终端命令行下用yum instal ***,安装以下列表软件。
bison
flex
texinfo
automake
libtool
patch
gcc-java // 原名gcj
cvs
cvsd // 手动
gawk
termcap // 手动
glibc-static 

  
其中cvsd和termcap需要手动安装
手动安装termcap方法:
tar zxvf termcap-1.3.1.tar.gz
cd termcap-1.3.1
./configure --prefix=/usr
make
make install

三.下载并安装croostool-ng

crosstool-ng的下载地址是:http://ymorin.is-a-geek.org/download/crosstool-ng

本次下载的版本是1.9.3.tar.bz2,无 patch。

安装方法如下:

$ mkdir ~/croosstool-ng # 在当前用户目录下建立croosstool-ng目录
$ cd ~/croosstool-ng
$ mv /tmp/crosstool-ng-1.9.3.tar.bz2 ./ # 把下载的crosstool-ng软件包放到 crosstool-ng目录中
$ tar -jxvf crosstool-ng-1.9.3.tar.bz2 # 解包
$ cd crosstool-ng-1.9.3 # 进入解压目录
$ ./configure --prefix=/opt/crosstool-ng # 配置crosstool-ng
$ make # 编译crosstool-ng
$ sudo make install # 安装crosstool-ng
$ echo "PATH=$PATH:/opt/crosstool-ng/bin" >> ~/.bashrc # 为后面调用ct-ng命令增加环境变量
$ source ~/.bashrc
$ ct-ng help
This is crosstool-NG version 1.9.3


四.配置crosstool-ng

 

$ cd ~/croosstool-ng
$ mkdir crosstool-ng-1.9.3_build # 建立一个交叉工具链的输出目录
$ mkdir src # 建立保存源码包目录
$ mkdir x-tools # 建立交叉编译器的安装路径
$ cd crosstool-ng-1.9.3_build/
$ cp /opt/crosstool-ng/lib/ct-ng-1.9.3/samples/arm-unknown-linux-gnueabi/crosstool.config .config
$ ct-ng menuconfig

 

此时会出现crosstool-ng的配置窗口,针对不同架构的ARM芯片对其进行修改配置:
1、已下载好的源码包路径和交叉编译器的安装路径。
Paths and misc options  --->
  (${HOME}/crosstool-ng/src) Local tarballs directory           保存源码包路径
  (${HOME}/crosstool-ng/x-tools) Prefix directory  交叉编译器的安装路径 

2、修改交叉编译器针对的构架
 Target options  --->
           *** Target optimisations ***
           (armv6) Architecture level
           (arm1176jzf-s) Emit assembly for CPU   
           (arm1176jzf-s) Tune for CPU

3、增加编译时的并行进程数,以增加运行效率,加快编译。
Paths and misc options  --->
   *** Build behavior ***
   (4) Number of parallel jobs
   这个数值不宜过大,应该为CPU数量的两倍。由于我的CPU是双核的,所以我填了4.

4、一些个性化的修改(可以不修改)
Toolchain options  --->
       *** Tuple completion and aliasing *** 
       (s3c6410) Tuple's vendor string
这样产生的编译器前缀就是:arm-s3c6410-linux-gnueabi-

5、修改operating system 内核版本

linux kernel version(2.6.32.25)

6、修改companion libraries 配置

GPM version(4.3.1)

MPFR version(3.0.0)

五.下载源文件

尽管crosstool-ng在编译时会自动下载,但速度较慢,最好自行下载。源文件列表如下:

linux-2.6.33.25.tar.bz2
binutils-2.19.1.tar.bz2
gcc-4.3.2.tar.bz2
glibc-2.9.tar.gz
dmalloc-5.5.2.tgz
duma_2_5_15.tar.gz
gdb-6.8.tar.bz2
ltrace_0.5.3.orig.tar.gz
strace-4.5.19.tar.bz2
gmp-4.3.1.tar.bz2
mpfr-3.0.0.tar.bz2
libelf-0.8.13.tar.gz

以下几个文件没有出现在.config文件里,其实也是需要的:
ncurses-5.7.tar.gz
ecj-latest.jar
glibc-ports-2.9.tar.bz2
sstrip.c

这些下载好的软件包放到前面设定的${HOME}/crosstool-ng/src文件夹中。

六.编译
在crosstool-ng-1.8.2_build目录下执行命令开始编译:

 

$ ct-ng build.4

 编译了大概一个半小时。

没有错误的话最后几条输出为:

[INFO ] =================================================================
[INFO ] Cleaning-up the toolchain's directory
[EXTRA] Installing the populate helper
[EXTRA] Installing a cross-ldd helper
[EXTRA] Creating toolchain aliases
[EXTRA] Removing access to the build system tools
[INFO ] Cleaning-up the toolchain's directory: done in 0.14s (at 91:22)
[INFO ] Build completed at 20101016.151504
[INFO ] (elapsed: 91:21.78)
[INFO ] Finishing installation (may take a few seconds)...
[91:22] / [efronc@localhost crosstool-ng-1.8.2_build]$

如果有错误,不要只看终端中的输出,去看看**i/build.log这个文件,在最后出错前会提示找不到什么等等提示。

2、查看编译成功的工具

    cd /root/croosstool-ng/x-tools/bin

    ls

七.添加环境变量

还需要最后一步,就是添加环境变量,输入:

$ echo "PATH=$PATH:$HOME/crosstool-ng/x-tools/bin" >> ~/.bashrc
$ source ~/.bashrc
$ arm-s3c6410-linux-gnueabi-gcc 

注意我的名字所s3c6410,不要盗版哦!否则会出错的o(∩∩)o...最后那一条就是测试用的拉,如果输出下面的内容,那么恭喜你成功拉!

[root@localhost ~]# arm-s3c6410-linux-gnueabi-gcc  -v
Using built-in specs.
Target: arm-s3c6410-linux-gnueabi
Configured with: /root/croosstool-ng/crosstool-ng-1.9.3_build/targets/src/gcc-4.3.2/configure --build=i686-build_pc-linux-gnu --host=i686-build_pc-linux-gnu --target=arm-s3c6410-linux-gnueabi --prefix=/root/croosstool-ng/x-tools --with-sysroot=/root/croosstool-ng/x-tools/arm-s3c6410-linux-gnueabi//sys-root --enable-languages=c,c++ --disable-multilib --with-arch=armv6 --with-cpu=arm1176jzf-s --with-tune=arm1176jzf-s --with-float=soft --with-pkgversion=crosstool-NG-1.9.3 --disable-sjlj-exceptions --enable-__cxa_atexit --disable-libmudflap --disable-libgomp --disable-libssp --with-gmp=/root/croosstool-ng/crosstool-ng-1.9.3_build/targets/arm-s3c6410-linux-gnueabi/build/static --with-mpfr=/root/croosstool-ng/crosstool-ng-1.9.3_build/targets/arm-s3c6410-linux-gnueabi/build/static --enable-threads=posix --enable-target-optspace --with-local-prefix=/root/croosstool-ng/x-tools/arm-s3c6410-linux-gnueabi//sys-root --disable-nls --enable-symvers=gnu --enable-c99 --enable-long-long
Thread model: posix


八.简单测试

下面通过一个简单的程序测试刚刚建立的交叉编译工具链看是否能够正常工作。写一个最简
单的 hello.c 源文件,内容如下:
#include <stdio.h>
int main( )
{
   printf(“Hello,world!/n”);
   return 0;
}

注意,通过该交叉编译链编译的可执行文件只能在 ARM 体系下执行,不能在基于X86 的普通 PC 上执行。

[efronc@localhost test_for_arm_linux_gcc]$ vi hello.c
[efronc@localhost test_for_arm_linux_gcc]$ arm-s3c6410-linux-gnueabi-gcc -o hello hello.c


十.参考文献

在fedora13下用crosstool-ng建立arm-linux交叉编译环境:http://blog.csdn.net/babyfans/article/details/6062975

在ubuntu下用crosstool-ng建立arm-linux交叉编译环境 :http://blog.csdn.net/zhanglianpin/article/details/22031267






0 0