利用Crosstool-ng制作交叉编译工具链
1、什么是crosstool-ng
crosstool-ng,全称是crosstool Next Generation,即下一代crosstool,即crosstool的升级版。那么什么是crosstool 呢?crosstool,是个交叉编译器的制作工具。交叉编译器简单的说可以理解为在X86电脑上编译处ARM的运行程序。更详细的介绍可以参考《构建嵌入式LINUX系统》的第四章。
2、制作交叉编译工具链的步骤
a、从网址 http://crosstool-ng.org/download/crosstool-ng/下载相应版本的crosstool-ng工具,我下载的版本是crosstool-ng-1.20.0.tar.bz2。若有补丁也需要同时下载,网址为http://crosstool-ng.org/download/crosstool-ng/01-fixes/。
b、解压crosstool-ng-1.20.0.tar.bz2。命令为tar xjf crosstool-ng-1.20.0.tar.bz2。解压后得到一个名为crosstool-ng-1.20.0的文件夹。输入命令cd crosstool-ng-1.20.0进入文件夹,如果有兴趣可以看下README文件,它会教你一步步制作交叉编译工具链。另外doc文件夹下有详细的制作步骤可以参考。
c、配置、编译安装crosstool-ng-1.20.0。步骤:进入crosstool-ng-1.20.0文件夹,执行./configure --prefix=/work/tools/crosstool-ng命令配置crosstool-ng-1.20.0,/work/tools/crosstool-ng为crosstool-ng-1.20.0的安装路径。若配置过程中出现错误,一般是缺少某个程序造成的,缺什么安装什么就可以了。一般需要安装的程序为 sudo apt-get install sed bash cut dpkg-dev bison flex patch texinfo automake m4 libtool stat cvs websvn tar gzip bzip2 lzma readlink libncurses5-dev bison flex texinfo automake libtool patch gcj cvs cvsd gawk。配置成功后执行make命令编译,然后make install进行安装。如果后面出现编译错误,再增加相应的包即可。安装完成后可以执行export PATH=$PATH:/work/tools/crosstool-ng/bin。把ct-ng命令放到环境变量中,这样就可以在任何地方执行ct-ng了。为了测试是否安装成功可以输入ct-ng --help命令测试。就出现相应的说明就说明安装成功了。
d、配置工具链选项。步骤:将crosstool-ng源码包中samples/arm-unknown-linux-gnueabi/下的crosstool.config拷贝到源码包主目录下,在源码包主目录下执行cp samples/arm-unknown-linux-gnueabi/crosstool.config .config;
- 然后执行:ct-ng menuconfig可以看到如下的配置画面

- 进入Paths and misc options -- →菜单,修改内容如下:
- 1)、(${HOME}/src) Local tarballs directory # 指定制作编译器所需要的源码包的下载存放,可以修改成任意位置,请注意权限。现在指定到/work/tools/crosstool-ng-1.20.0/src 下。
- 2)、(/opt/${CT_TARGET}) Prefix directory # 制作好的编译器所放置的目录。现在指定到/work/tools/crosstool-ng_build下。
- 3)、选择Debug crosstool-NG,会多出一个子菜单,选中Save intermediate steps,此选项提供一个从上一步错误的地方继续编译,而不是从新编译,这样节约大量的时间。选择(3)Number of parallel jobs(NEW),这个菜单需要下拉才能看到此项为增加编译时的并行进程数,以增加运行速度,加速编译。
进入target options -- →菜单,修改的内容如下:
1)、确认Target Architecture (arm) ---> # 注意看这项是不是ARM平台
2)、ARMv4t 表示编译出的编译器支持ARMv4t架构的cpu;ARM920t 为指定cpu的类型,S3C2440使用的CPU核心为ARM920t。通过查找资料,这个应该是指令集的架构,对于S3C2410/S3C2440,都ARM920T的核心,架构指令是armv4t,所以,如果要编译2410/2440的,就选armv4t。以此类推S3C6410 ARM1176JZF-S核心使用的是armv6架构,就选armv6。可以通过./arm-linux-gcc --target查看架构。

进入Toolchain option-- →菜单,修改的内容如下:
1)、Tuple's vendor string指定经销商的名称,影响向生成的编译器的前缀为arm-andy-Linux-gnueabi;Tuple's alias是生成编译器别名,可以使用arm-linux-gcc简洁的命令

进入Operating System --->菜单。选择编译的内核版本。这里使用默认的参数

进入Binary utilities --->选择binutils的源码包版本号,配置二进制工具。这里使用默认参数。

C-library --->菜单,选择glibc库版本,使用默认参数

C compiler --->菜单选择GCC版本,选择默认参数

Debug facilities --->菜单,选择调试工具版本,默认参数。

Companion libraries --->菜单,编译工具,GMP是实现任意精度算术运算的软件包,可以完成有符号整数、有理数和浮点数的运算。只要计算机的内存满足需求,GMP的运算精度没有任何限制。MPFR是一个用于高精度浮点运算的C库。默认参数

接着保存退出。配置完成。
e、下面就可以开始编译了,默认情况下,源码包会从网络下载,会占用比较大的带宽,下载后总大小在200MB左右,下载好会放到 /work/tools/crosstool-ng-1.20.0/src下。也可以先从网上下载,大部分软件可以在这个清华镜像下载:https://mirrors.tuna.tsinghua.edu.cn,然后再编译。也可以先编译,如果缺少相应的包下载不成功,会提示。大致的包列表如下:
binutils-2.22.tar.bz2
cloog-0.18.1.tar.gz
dmalloc-5.5.2.tgz
duma_2_5_15.tar.gz
expat-2.1.0.tar.gz
gcc-4.9.1.tar.bz2
gdb-7.8.tar.gz
glibc-2.19.tar.bz2
gmp-5.1.3.tar.xz
isl-0.12.2.tar.bz2
libelf_0.8.13.orig.tar.gz
linux-3.4.97.tar.gz
ltrace_0.7.3.orig.tar.bz2
mpc-1.0.2.tar.gz
mpfr-3.1.2.tar.xz
ncurses-5.9.tar.gz
strace-4.8.tar.xz
f、执行ct-ng build开始编译,我在编译过程中一共遇到两个问题。
1)、安装到cross-gdb时,出现configure: error: expat is missing or unusable,expat-2.1.0.tar.gz这个文件是运行build时它自己下载的。解决:sudo apt-get install libexpat1-dev.
2)、解决完问题1后执行ct-ng cross-gdb+可以接着前面的编译。又出现了_123136.c:835:15: error: expected ')' before 'int'的错误。在网上搜寻答案。解决:export CPPFLAGS="-P"。
g、最后编译成功界面如下,切换到编译后的路径/work/tools/crosstool-ng_build/bin。执行./arm-linux-gcc -v。若有信息输出,说明编译成功

h、测试编译后的arm程序。未完待续。
利用Crosstool-ng制作交叉编译工具链的更多相关文章
- Crosstool-ng制作交叉编译工具链
Crosstool-ng制作交叉编译工具链 交叉编译器可以用现成的,比如CodeSourcery制作的交叉编译器,也可以自己制作,一般是用kernel+gcc+glibc+binutils的源码包来编 ...
- 使用buildroot创建自己的交叉编译工具链【转】
本文转载自:https://blog.csdn.net/linczone/article/details/45894181 使用buildroot创建自己的交叉编译工具链 关键字:buildroot ...
- arm-linux交叉编译工具链的制作(基于S3C2440)【转】
本文转载自:http://eric-gao.iteye.com/blog/2160622 制作arm-linux交叉编译工具链一般通过crosstool工具或者crosstool-NG,前者使用方便, ...
- Linux ARM交叉编译工具链制作过程【转】
本文转载自:http://www.cnblogs.com/Charles-Zhang-Blog/archive/2013/02/21/2920999.html 一.下载源文件 源代码文件及其版本与下载 ...
- CROSSTOOL-NG建立交叉编译工具链
CROSSTOOL-NG建立交叉编译工具链 因为考试和学习的原因我已经一段时间没有玩我的JZ2440,现在终于考完试了,我再次找出了我的JZ2440.我之前学习的时候使用的是韦东山老师提供的开发工具, ...
- 交叉编译工具链介绍《Building Embedded Linux Systems》
1.前言 配置和编译一个合适的GNU工具链是相对复杂的并且需要很精细的操作,包括你需要对不同软件库之间的依赖关系.它们的各自的任务,不同软件库版本情况都有比较好的了解,编译工具链是一个乏味的工作. 2 ...
- 构建嵌入式Linux交叉编译工具链
开源交叉编译工具链制作方法汇总: 1) 使用crosstool/crosstool-ng生成 2) 使用buildroot生成 ARM交叉编译工具链说明: 1) arm-linux-gcc是一个集合命 ...
- 【转】ARM交叉编译工具链
原文网址:http://www.veryarm.com/cross-tools 为什么要用交叉编译器? 交叉编译通俗地讲就是在一种平台上编译出能运行在体系结构不同的另一种平台上的程序,比如在PC平台( ...
- ARM交叉编译工具链分类说明
转载整理自:http://www.veryarm.com/cross-tools 从授权上,ARM交叉编译工具链分为免费授权版和付费授权版. 免费版目前有三大主流工具商提供,第一是GNU(提供源码,自 ...
随机推荐
- 如何避免在IE内核时,按BackSpace时进行网页会进行回退
//解决在IE浏览器中input被设置成readonly时,点击Backspace时会出现网页回退 document.onkeydown = check; function check(e) { va ...
- centos7安装Jenkins
一.准备工作 机器要求: 256MB内存,建议大于512MB 10GB的硬盘空间(用于存放Jenkins镜像) 需要安装以下软件: Java (JRE或者JDK都可以) 需要可以访问公网 关闭防火墙连 ...
- Flack--SQLAlchemy
SQLAlchemy 一. 介绍 SQLAlchemy是一个基于Python实现的ORM框架.该框架建立在 DB API之上,使用关系对象映射进行数据库操作,简言之便是:将类和对象转换成SQL,然后使 ...
- iptables 配置说明
#配置,禁止进,允许出,允许回环网卡 iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -A INPUT -i lo -j ACCEP ...
- loadrunner-关联
1.什么是关联? 将服务器动态返回的值,保存成一个参数,供后面需要使用到 此参数的地方使用 PS:1.一定是服务器返回的 2.动态变化的,静态不需要关联 3.服务器需要校验的 4.保存成一个参数 5. ...
- Jquery如何序列化form表单数据为JSON对象
jquery提供的serialize方法能够实现. $("#searchForm").serialize();但是,观察输出的信息,发现serialize()方法做的是将表单中的数 ...
- java中对list进行分页显示数据到页面
http://blog.csdn.net/Tang_Mr/article/details/76212184#10006-weixin-1-52626-6b3bffd01fdde4900130bc5a2 ...
- 如何高效的学习Java开发
IT 行业的变化快是众人皆知的,需要持续去学习新的知识内容.但是,往往我们工作之后,经常发现学习的东西很少了,学习效率非常低,感觉自己到了一个瓶颈期,久而久之,就演变成『一年工作经验,重复去用十年』的 ...
- 沙箱机制(Sandboxie)
一.沙箱是什么? 沙箱是一个虚拟系统程序,沙箱提供的环境相对于每一个运行的程序都是独立的,而且不会对现有的系统产生影响. 二.沙箱的应用 (1)搭建测试环境.沙箱的应用只能访问自己的应用访问目录,而不 ...
- EFM32之GPIO
配置时钟: void CMU_ClockEnable(CMU_Clock_TypeDef clock, bool enable) CMU_ClockEnable(cmuClock_HFPER, tru ...
