crosstool-ng详解

版本:v2.0

Crifan Li

摘要

本文主要介绍了什么是crosstool-ng,crosstool-ng的名字的写法的含义,为何要有crosstool-ng,crosstool-ng的各种特点,crosstool-ng的使用的基本逻辑;

下载crosstool-ng,安装crosstool-ng到当前系统环境中;

接着介绍了crosstool-ng的常见文件夹的结构组织,关于crosstool-ng本身的一些背景知识和逻辑,比如用ct-ng help查看所拥有的功能,用ct-ng list-steps查看本身的build过程分成哪几步,用ct-ng list-samples查看当前已包含哪些默认的示例配置,用ct-ng show-tuple查看当前配置的是什么交叉编译器,用ct-ng version查看当前crosstool-ng的版本,然后介绍了crosstool-ng本身的配置的使用的基本逻辑,包含使用已有的crosstool-ng的示例配置和根据需要去修改你的crosstool-ng的配置

然后极其详细的解释了crosstool-ng中的各种配置参数含义和用法,主要包含几个方面:crosstool-ng工具相关的配置参数,比如多线程编译以节省时间,从之前错误的那一步恢复继续编译,出错时不立刻退出等,再介绍crosstool-ng核心配置详解,包括crosstool-ng本身相关的重要参数,比如源码包下载保存路径,工作路径,目标安装路径,和交叉编译相关的核心参数,包括举例说明Architecture level, Emit assembly for CPU, Tune for CPU如何去配置,以及其他重要参数,比如MMU,大小端Endianness,浮点处理单元FPU,CFLAGS参数,Linux内核版本,binutils版本,gcc版本,C库的选择,线程模型的选择等。

接着介绍用ct-ng build编译crosstool-ng的过程,然后总结了crosstool-ng常见问题及解决办法,包括几方面:安装crosstool-ng工具本身的,crosstool-ng在配置阶段的,crosstool-ng在编译阶段的

最后介绍了与crosstool-ng相关的一些事项,比如crosstool-ng的作者的主页,linaro对crosstool-ng的支持,Buildroot支持crosstool-ng。

[提示] 本文提供多种格式供:
在线阅读 HTML HTMLs PDF CHM TXT RTF WEBHELP
下载(7zip压缩包) HTML HTMLs PDF CHM TXT RTF WEBHELP

HTML版本的在线地址为:

http://www.crifan.com/files/doc/docbook/crosstool_ng/release/html/crosstool_ng.html

有任何意见,建议,提交bug等,都欢迎去讨论组发帖讨论:

http://www.crifan.com/bbs/categories/crosstool_ng/

2013-09-04

修订历史
修订 2.0 2013-09-04 crl
  1. 将帖子内容整理过来
  2. 添加了关于配置的详细解释
  3. 添加了关于常见错误的总结

目录

前言
1. 本文目的
2. 待完成
1. crosstool-ng简介
1.1. 什么是crosstool-ng
1.2. crosstool-ng的名字的写法
1.3. 为何要有crosstool-ng
1.4. crosstool-ng的特点
1.4.1. 支持(类似于Linux内核配置的那个)menuconfig
1.4.2. 支持足够多,且越来越多的架构(architecture)
1.4.3. 支持工具链中可选多种不同的C库等模块
1.4.4. 支持不同目标OS平台
1.4.5. 补丁仓库
1.4.6. 支持不同的线程模型
1.4.7. 支持软浮点和硬件浮点
1.4.8. 支持multlib的工具链(暂处于试验阶段)
1.4.9. 支持众多调试相关的内容
1.4.10. 提供示例配置
1.4.11. 支持多种主机编译环境:各种Linux发行版,Cygwin等
1.5. crosstool-ng的使用的基本逻辑
2. 下载和安装crosstool-ng
2.1. 下载crosstool-ng
2.2. 安装crosstool-ng
3. 配置crosstool-ng:ct-ng menuconfig
3.1. 关于crosstool-ng本身的一些背景知识和逻辑
3.1.1. 用ct-ng help查看所拥有的功能
3.1.2. 用ct-ng list-steps查看本身的build过程分成哪几步
3.1.3. 用ct-ng list-samples查看当前已包含哪些默认的示例配置
3.1.4. 用ct-ng show-tuple查看当前配置的是什么交叉编译器
3.1.5. 用ct-ng version查看当前crosstool-ng的版本
3.2. crosstool-ng本身的配置的使用的基本逻辑
3.2.1. 使用已有的crosstool-ng的示例配置
3.2.2. 根据需要去修改你的crosstool-ng的配置
3.3. crosstool-ng的配置参数详解
3.3.1. crosstool-ng工具相关的配置参数
3.3.1.1. 多线程编译以节省时间
3.3.1.2. 从之前错误的那一步恢复继续编译
3.3.1.3. 出错时不立刻退出
3.3.2. crosstool-ng核心配置详解
3.3.2.1. crosstool-ng本身相关的重要参数
3.3.2.1.1. 源码包下载保存路径
3.3.2.1.2. 工作路径
3.3.2.1.3. 目标安装路径
3.3.2.2. 交叉编译相关的核心参数
3.3.2.2.1. crosstool-ng中的配置参数:Architecture level, Emit assembly for CPU, Tune for CPU
3.3.2.2.2. crosstool-ng中的配置参数:MMU
3.3.2.2.3. crosstool-ng中的配置参数:大小端Endianness
3.3.2.2.4. crosstool-ng中的配置参数:浮点处理单元FPU
3.3.2.2.5. crosstool-ng中的配置参数:CFLAGS参数
3.3.2.2.6. crosstool-ng中的配置参数:Linux内核版本
3.3.2.2.7. crosstool-ng中的配置参数:binutils版本
3.3.2.2.8. crosstool-ng中的配置参数:gcc版本
3.3.2.2.9. crosstool-ng中的配置参数:C库的选择
3.3.2.2.10. crosstool-ng中的配置参数:线程模型的选择
4. 编译crosstool-ng:ct-ng build
5. crosstool-ng常见问题及解决办法
5.1. 安装crosstool-ng工具本身的阶段常见问题及解决办法
5.1.1. 缺少一些开发相关的工具
5.1.1.1. configure: error: missing required tool: bison
5.1.1.2. configure: error: missing required tool: flex
5.1.1.3. configure: error: missing required tool: gperf
5.1.1.4. configure: error: missing required tool: makeinfo
5.1.1.5. configure: error: could not find GNU awk
5.1.1.6. configure: error: could not find GNU libtool >= 1.5.26
5.1.1.7. configure: error: could not find GNU automake >= 1.10
5.1.1.8. configure: error: could not find curses header, required for the kconfig frontends
5.1.2. 在Cygwin下出现的一些问题
5.1.2.1. zconf.tab.o:zconf.tab.c:(.text+0x162a): undefined reference to ‘_libintl_gettext'
5.1.2.2. lxdialog/menubox.o:menubox.c:(.text+0x7d): undefined reference to `_wattrset'
5.1.2.3. nconf.c:1521:2: error: lvalue required as left operand of assignment
5.1.2.4. bash: ct-ng: command not found
5.1.2.5. Win7下无法编辑保存Cygwin中的文件
5.2. crosstool-ng在编译阶段常见问题及解决办法
5.2.1. 不论何种平台下编译crosstool-ng常见错误及解决办法
5.2.1.1. scripts/unifdef.c:209:25: error: conflicting types for ‘getline'
5.2.1.2. Build failed in step ‘Extracting and patching toolchain components’,in function ‘CT_DoExecLog’ (line unknown, sorry)
5.2.1.3. [libgcc/./_powisf2.o] Error 1,/tmp/cc7Xh6xp.s:21: Error: selected processor does not support ARM mode `fmsr s14,r0′
5.2.1.4. .build/arm-xscale-linux-gnueabi/buildtools/include/cloog/ppl_backend.h:54: undefined reference to `_ppl_finalize'
5.2.1.5. Makefile:240: *** mixed implicit and normal rules. Stop.
5.2.1.5.1. 手动修改每个Makefile中对应的混合规则->使得3.82的make可以识别
5.2.1.5.2. 把3.82的make换成3.81版本的make
5.2.1.5.2.1. 把你当前的(Linux或Cygwin等)系统环境中的3.82的make换成3.81的make
5.2.1.5.2.2. 用crosstool-ng中提供的3.81的make(而不用更换系统环境中的3.82的make)
5.2.2. Cygwin下编译crosstool-ng常见错误及解决办法
5.2.2.1. Cygwin下编译crosstool-ng时导致内存泄露
5.2.2.2. Your file system in ‘xxx/targets’ is *not* case-sensitive!
5.2.3. Linux下编译crosstool-ng常见错误及解决办法
5.2.3.1. gcc-4.2.2/gcc/regrename.c:1646:12: error: ‘IFCVT_ALLOW_MODIFY_TEST_IN_INSN’ undeclared (first use in this function)
6. 与crosstool-ng相关的一些事项
6.1. crosstool-ng的作者的主页
6.2. crosstool-ng支持Linaro的gcc
6.3. Buildroot支持crosstool-ng
参考书目

范例清单

3.1. 从出错的那一步恢复重新继续编译
3.2. 如何在编译失败后,修复错误,然后继续接着编译
3.3. 举例说明Architecture level, Emit assembly for CPU, Tune for CPU如何去配置
4.1. 正常输出的log信息