Crosstool-ng制作交叉编译工具链:修订间差异
来自Ubuntu中文
跳到导航跳到搜索
第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
- 首先从官方网站上下载crosstool-ng的源码包http://ymorin.is-a-geek.org/download/crosstool-ng/crosstool-ng-1.11.1.tar.bz2
- 将此源码包解压缩并编译安装
tar xvjf crosstool-ng-1.11.1.tar.bz2 cd crosstool-ng--1.11.1 make sudo make install
- 如果一切正常,则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这样的编译器前缀
- 修改以后就可以开始编译了。
自动下载和编译
下载
安装交叉编译器和测试
安装