Chinaunix首页 | 论坛 | 博客
  • 博客访问: 287464
  • 博文数量: 59
  • 博客积分: 1346
  • 博客等级: 中尉
  • 技术积分: 461
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-06 17:17
文章分类

全部博文(59)

文章存档

2012年(9)

2011年(50)

分类: LINUX

2011-01-06 17:21:08

利用crosstool-ng建立arm-linux交叉编译工具
  由于之前用的交叉编译工具太旧了,所以一直想亲自动手编译一个自己所需要的工具,在这里首先感谢网络中分享交叉编译工具方法的的大牛们给了我很大的帮助,尤其是Tekkaman  Ninja 的blog,编译成功了是按照他的思路进行编译的,并做此记录保存下来,为以后再次编译所用。
 
编译步骤如下:
  
   操作系统:Ubuntu10.10
   源代码:
   参考文献: 1.

一:应用软件的安装和所需源代码的安装。
1. 由于使用Ubuntu操作系统时,很多开发软件没有安装,因此先对一些软件进行了安装。
   : sudo apt-get install
   并利用 apt-get install *   (*代表以下文件) 安装了以下文件:
      g++
    libncurses5-dev
    bison
    flex
    texinfo
    automake
    libtool
    patch
   gcj
   cvs
   cvsd
   gawk
以上文件安装的过程中我是写的一个简单脚本来实现的。然后可以先从windows下下载建立交叉编译工具所用到的文件 虚拟机下下载文件实在是太慢:(将其保存在一个文件夹source中)

         
       
  

      
        
ncurses-5.7.tar.gz
      
     

       
  

        

以上安装软件可以按照crosstool-ng中的TARGET相应的配置文件来下载。
 
二: 配置、编译和安装
 
将crosstool-ng-1.9.0.tar.bz2复制到/home/gusen/crosstool目录下
将source中的所有文件复制到/home/gusen/crosstool/src目录下

cd /home/gusen/crosstool

mkdir crosstool-build                    #编译新交叉编译器的工作目录
mkdir crosstool-install                  #安装目录

tar xjvf crosstool-ng-1.9.0.tar.bz2  #解压文件
cd crosstool-ng-1.9.0           

patch -p1 <   <补丁文件>            # 给crosstool-ng打补丁(如果有)

./configure --prefix=/home/gusen/crosstool/crosstool-install

                                   #配置crosstool-ng
make                               #编译crosstool-ng
make install                       #安装crosstool-ng

 
三. 配置交叉编译工具
 
   可以通过中已经给出了各种相适应的编译器的配置软件。配置文件在crosstool-ng-X.Y.Z/samples目录下你只要针对其进行修改就好了。

cd /home/gusen/crosstool/crosstool-build/  

cp ../crosstool-ng-1.9.0/samples/arm-unknown-linux-gnueabi /* ./

#拷贝默认配置文件到工作目录

mv crosstool.config  .config

#修改文件名

../crosstool-install/bin/ct-ng menuconfig 


  要按照自己实际设定的情况来进行配置:
1、设定源码包路径和交叉编译器的安装路径。

Paths and misc options --->

   (/home/gusen/crosstool/src) Local tarballs directory 保存源码包路径

     (/home/gusen/crosstool/tools) Prefix directory

交叉编译器的安装路径

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


以上这几个参数是如何得出的可以参考gcc的man手册,你可以在你下载的gcc-4.3.2.tar.bz2解压后找到,她的位置是gcc-4.3.2/gcc/doc/gcc.1。打开方式:

man ./gcc.1


你可以在其中找到:

......
 ARM Options
......
-mcpu=name   (
Emit assembly for CPU)
           This specifies the name of the target ARM processor. GCC uses this
           name to determine what kind of instructions it can emit when gener‐
           ating assembly code. Permissible names are: arm2, arm250, arm3,
           arm6, arm60, arm600, arm610, arm620, arm7, arm7m, arm7d, arm7dm,
           arm7di, arm7dmi, arm70, arm700, arm700i, arm710, arm710c, arm7100,
           arm7500, arm7500fe, arm7tdmi, arm7tdmi-s, arm8, strongarm, stron‐
           garm110, strongarm1100, arm8, arm810, arm9, arm9e, arm920, arm920t,
           arm922t, arm946e-s, arm966e-s, arm968e-s, arm926ej-s, arm940t,
           arm9tdmi, arm10tdmi, arm1020t, arm1026ej-s, arm10e, arm1020e,
           arm1022e, arm1136j-s, arm1136jf-s, mpcore, mpcorenovfp,
           arm1156t2-s, arm1176jz-s, arm1176jzf-s, cortex-a8, cortex-r4, cor‐
           tex-m3, xscale, iwmmxt, ep9312.

       -mtune=name  
(Tune for CPU)
           This option is very similar to the -mcpu= option, except that
           instead of specifying the actual target processor type, and hence
           restricting which instructions can be used, it specifies that GCC
           should tune the performance of the code as if the target were of
           the type specified in this option, but still choosing the instruc‐
           tions that it will generate based on the cpu specified by a -mcpu=
           option. For some ARM implementations better performance can be
           obtained by using this option.

       -march=name 
(Architecture level)
           This specifies the name of the target ARM architecture. GCC uses
           this name to determine what kind of instructions it can emit when
           generating assembly code. This option can be used in conjunction
           with or instead of the -mcpu= option. Permissible names are:
           armv2, armv2a, armv3, armv3m, armv4, armv4t, armv5, armv5t,
           armv5te, armv6, armv6j, armv6t2, armv6z, armv6zk, armv7, armv7-a,
           armv7-r, armv7-m, iwmmxt, ep9312.

......


3、增加编译时的并行进程数,以增加运行效率,加快编译。
Paths and misc options  --->
   *** Build behavior ***
   (2) Number of parallel jobs
   这个数值不宜过大,应该为CPU数量的两倍。
4、关闭JAVA编译器
 C compiler  --->
      *** Additional supported languages: ***
      [N] Java 
5、一些个性化的修改(可以不修改)
Toolchain options  --->
       *** Tuple completion and aliasing *** 
       (gusen) Tuple's vendor string
这样产生的编译器前缀就是:arm-gusen-linux-gnueabi-

C compiler  --->
       (crosstool-NG-${CT_VERSION}-gusen) gcc ID string

配置好以后保存。
 
四:编译

../crosstool-install/bin/ct-ng build


四:安装路径和库文件
  如果编译成功,为方便使用可以安装交叉编译工具的路径和库文件。参考:添加路径PATH和库文件
  路径安装:

vi /etc/profile 在其文件下添加:PATH=/home/gusen/crosstool/tools/bin:$PATH

#编译器执行文件位于: /home/gusen/crosstool/tools

source /etc/profile 使文件生效


添加库文件:

vi /etc/ld.so.conf  查看文件中是否不存在下面一条语句: include /etc/ld.so.conf.d/*.conf 不存在则加入

cd /etc/ld.so.conf.d  #进入ld.so.conf.d文件

vi arm-libc.conf   # 新建一个以 .conf 结尾的文件

在arm-libc.conf 文件中写入PATH:

/home/gusen/crosstool/tools/arm-gusen-linux-gnueabi/sys-root/lib

    好像库文件在这个地方

    最后, arm-gusen-linux-gnueabi-gcc -v (显示交叉编译器版本)

       (在root下无效)

阅读(2161) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2011-01-07 17:02:24

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com