Crosstool-ng制作交叉编译工具链:修订间差异

来自Ubuntu中文
跳到导航跳到搜索
Tonghuix留言 | 贡献
Tonghuix留言 | 贡献
第34行: 第34行:
crosstool-ng可以配置各种平台的交叉编译器,也可以构建符合自己实用条件的个性编译器。下面以ARM平台为例,制作具有一定通用性的交叉编译器。这里我们从一个现成的编译器配置开始,用例子里的arm-unknown-linux-gnueabi作为配置的基础,然后来做一个交叉编译器。
crosstool-ng可以配置各种平台的交叉编译器,也可以构建符合自己实用条件的个性编译器。下面以ARM平台为例,制作具有一定通用性的交叉编译器。这里我们从一个现成的编译器配置开始,用例子里的arm-unknown-linux-gnueabi作为配置的基础,然后来做一个交叉编译器。


将crosstool-ng源码包中samples/arm-unknown-linux-gnueabi/下的crosstool.config拷贝到源码包主目录下,在源码包主目录下执行
;将crosstool-ng源码包中samples/arm-unknown-linux-gnueabi/下的crosstool.config拷贝到源码包主目录下,在源码包主目录下执行
   
   
  cp samples/arm-unknown-linux-gnueabi/crosstool.config .config
  cp samples/arm-unknown-linux-gnueabi/crosstool.config .config


然后执行:
;然后执行:


  ct-ng menuconfig
  ct-ng menuconfig


进入配置菜单,与linux内核很类似
;进入配置菜单,与linux内核很类似


在这里,我对以下各选项稍作修改
:在这里,我对以下各选项稍作修改


  Paths and misc options  --->  
  Paths and misc options  --->  
第51行: 第51行:
     ......
     ......
     (/opt/${CT_TARGET}) Prefix directory    # 制作好的编译器所放置的目录
     (/opt/${CT_TARGET}) Prefix directory    # 制作好的编译器所放置的目录
  Target options  --->
  Target options  --->
     Target Architecture (arm)  ---> # 注意看这项是不是ARM平台
     Target Architecture (arm)  ---> # 注意看这项是不是ARM平台
第58行: 第57行:
     ......
     ......
     [*] Use EABI                            # 是否实用EABI方式,对某些指令采用异常的方式来处理(如除法指令),建议选中
     [*] Use EABI                            # 是否实用EABI方式,对某些指令采用异常的方式来处理(如除法指令),建议选中
  Toolchain options  --->
  Toolchain options  --->
       .....  
       .....  
       (tonghuix) Tuple's vendor string  # 这里可以修改成你自己的个性化名称,最后会生成形如arm-yourname-linux-gnueabi这样的编译器前缀
       (tonghuix) Tuple's vendor string  # 这里可以修改成你自己的个性化名称,最后会生成形如arm-yourname-linux-gnueabi这样的编译器前缀


修改以后就可以开始编译了。
;修改以后就可以开始编译了。


= 自动下载和编译 =
= 自动下载和编译 =

2011年5月13日 (五) 16:12的版本

之所以用crosstool-ng是因为crosstool-ng是新的用来建立交叉工具链的工具,它是crosstool的替换者。crosstool的gcc版本只能到4.1.1,无法编译版本高于2.6.29的linux内核。而crosstool-ng一直保持着更新,现在最新能够建立 gcc 4.3.2版本,可用来编译最新内核。

编译的系统环境是 ubuntu 10.10 + crosstool-ng 1.11.1

目标平台 ARMv4t, arm9tdmi

配置ubuntu编译环境

安装编译所需的包

 sudo apt-get install sed bash cut dpkg-dev bison flex patch texinfo automake m4 libtool stat cvs websvn tar gzip bzip2 lzma readlink libncuses5-dev bison flex texinfo automake libtool patch gcj cvs cvsd gawk -y

安装结束以后就可以用了。

如果后面出现编译错误,再增加相应的包即可

安装crosstool-ng

  1. 首先从官方网站上下载crosstool-ng的源码包http://ymorin.is-a-geek.org/download/crosstool-ng/crosstool-ng-1.11.1.tar.bz2
  1. 将此源码包解压缩并编译安装
 tar xvjf crosstool-ng-1.11.1.tar.bz2
 cd crosstool-ng--1.11.1
 make
 sudo make install
  1. 如果一切正常,则ct-ng命令就可以用了

注:编译的时候如果出现错误,可以利用apt-get的方式安装相应的包即可

配置自己的交叉编译器

crosstool-ng可以配置各种平台的交叉编译器,也可以构建符合自己实用条件的个性编译器。下面以ARM平台为例,制作具有一定通用性的交叉编译器。这里我们从一个现成的编译器配置开始,用例子里的arm-unknown-linux-gnueabi作为配置的基础,然后来做一个交叉编译器。

将crosstool-ng源码包中samples/arm-unknown-linux-gnueabi/下的crosstool.config拷贝到源码包主目录下,在源码包主目录下执行
cp samples/arm-unknown-linux-gnueabi/crosstool.config .config
然后执行:
ct-ng menuconfig
进入配置菜单,与linux内核很类似
在这里,我对以下各选项稍作修改
Paths and misc options  ---> 
    ......
    (${HOME}/src)   Local tarballs directory  # 这里可以指定制作编译器所需要的源码包的下载路径,可以修改成任意位置,但注意权限
    ......
    (/opt/${CT_TARGET}) Prefix directory     # 制作好的编译器所放置的目录
Target options  --->
    Target Architecture (arm)  ---> # 注意看这项是不是ARM平台
    ......
    Floating point: (software)  ---> # 对于很多ARM架构CPU来说是不支持硬浮点运算的,所以选择软件方式有更好的兼容性
    ......
    [*] Use EABI                            # 是否实用EABI方式,对某些指令采用异常的方式来处理(如除法指令),建议选中
Toolchain options  --->
     ..... 
     (tonghuix) Tuple's vendor string  # 这里可以修改成你自己的个性化名称,最后会生成形如arm-yourname-linux-gnueabi这样的编译器前缀
修改以后就可以开始编译了。

自动下载和编译

下载

安装交叉编译器和测试

安装