CROSSTOOL-NG建立交叉编译工具链


因为考试和学习的原因我已经一段时间没有玩我的JZ2440,现在终于考完试了,我再次找出了我的JZ2440。我之前学习的时候使用的是韦东山老师提供的开发工具,并没有自己建立过交叉编译工具链。而这次我就自己动手建立一个交叉编译的工具链
  • 平台:UBUNTU 15.04 64位 + crosstool-ng 1.22.0
  • 目标平台:ARMv4t, arm9tdmi,s3c2440

1.下载安装

ubuntu默认没安装git

sudo apt-get install git
sudo apt-get install gperf bison flex texinfo gawk libtool libncurses5-dev autoconf
git clone git://crosstool-ng.org/crosstool-ng
cd crosstool-ng
./bootstrap #这里一般会出现错误,根据错误使用apt-get安装相应的依赖就可以了
./configure #同上
make
sudo make install
ct-ng #测试是否安装成功

2.配置自己的交叉编译环境

将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 --->
......
(${HOME}/src) Local tarballs directory # 指定制作编译器所需要的源码包的下载存放,可以修改成任意位置,请注意权限。现在指定到~/src下。
......
(${HOME}/x-tools/${CT_TARGET}) Prefix directory # 制作好的编译器所放置的目录

Target options --->

Target Architecture (arm) ---> # ARM平台

......

Floating point: (software) ---> #很多ARM架构CPU来说是不支持硬浮点运算的,所以选择软件方式有更好的兼容性

......

[*] Use EABI # 是否实用EABI方式,对某些指令采用异常的方式来处理(如除法指令),建议选中

Toolchain options --->

.....

(zzm) Tuple's vendor string # 这里可以修改成你自己的个性化名称,最后会生成arm-yourname-linux-gnueabi这样的编译器前缀

Operating System ---> Target OS (linux) #目标操作系统linux

ct-ng build     #开始编译

漫长的编译,先睡一觉---


3.安装交叉编译器

cd ~/x-tools/arm-zzm-linux-gnueabi/bin
./arm-zzm-linux-gnueabi-gcc -v

输出类似

  Using built-in specs.
COLLECT_GCC=./arm-zzm-linux-gnueabi-gcc
COLLECT_LTO_WRAPPER=/home/zzm/x-tools/arm-zzm-linux-gnueabi/libexec/gcc/arm-zzm-linux-gnueabi/5.3.0/lto-wrapper
Target: arm-zzm-linux-gnueabi
Configured with: /home/zzm/crosstool-ng/.build/src/gcc-5.3.0/configure --build=x86_64-build_pc-linux-gnu --host=x86_64-build_pc-linux-gnu --target=arm-zzm-linux-gnueabi --prefix=/home/zzm/x-tools/arm-zzm-linux-gnueabi --with-sysroot=/home/zzm/x-tools/arm-zzm-linux-gnueabi/arm-zzm-linux-gnueabi/sysroot --enable-languages=c,c++ --with-float=soft --with-pkgversion='crosstool-NG crosstool-ng-1.22.0-66-g99cf467' --disable-sjlj-exceptions --enable-__cxa_atexit --disable-libmudflap --disable-libgomp --disable-libssp --disable-libquadmath --disable-libquadmath-support --disable-libsanitizer --with-gmp=/home/zzm/crosstool-ng/.build/arm-zzm-linux-gnueabi/buildtools --with-mpfr=/home/zzm/crosstool-ng/.build/arm-zzm-linux-gnueabi/buildtools --with-mpc=/home/zzm/crosstool-ng/.build/arm-zzm-linux-gnueabi/buildtools --with-isl=/home/zzm/crosstool-ng/.build/arm-zzm-linux-gnueabi/buildtools --with-libelf=/home/zzm/crosstool-ng/.build/arm-zzm-linux-gnueabi/buildtools --enable-lto --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' --enable-threads=posix --enable-target-optspace --enable-plugin --enable-gold --disable-nls --disable-multilib --with-local-prefix=/home/zzm/x-tools/arm-zzm-linux-gnueabi/arm-zzm-linux-gnueabi/sysroot --enable-long-long
Thread model: posix
gcc version 5.3.0 (crosstool-NG crosstool-ng-1.22.0-66-g99cf467)

这样就表明我们的交叉编译器,制作成功了。

把交叉编译器所在的目录添加到系统PATH变量中,修改~/.bashrc文件,在其中添加:

export PATH=$PATH:~/x-tools/arm-zzm-linux-gnueabi/bin

执行一下~/.bashrc文件

source ~/.bashrc

这样我们就可以直接使用arm-zzm-linux-gnueabi-gcc命令了

4.标准化安装交叉编译器

由于标准Makefile需要实用标准的交叉编译器的名称,一般这个名称是arm-linux-gcc这样的。

cd ~/x-tools/arm-zzm-linux-gnueabi/bin
vim link.sh

写入

#!/bin/sh
PREFIX=arm-zzm-linux-gnueabi- #zzm修改成你设置的
AFTFIX=arm-linux-
ln -s ${PREFIX}gcc ${AFTFIX}gcc
ln -s ${PREFIX}addr2line ${AFTFIX}addr2line
ln -s ${PREFIX}gdbtui ${AFTFIX}gdbtui
ln -s ${PREFIX}ar ${AFTFIX}ar
ln -s ${PREFIX}as ${AFTFIX}as
ln -s ${PREFIX}c++ ${AFTFIX}c++
ln -s ${PREFIX}c++filt ${AFTFIX}c++filt
ln -s ${PREFIX}cpp ${AFTFIX}cpp
ln -s ${PREFIX}g++ ${AFTFIX}g++
ln -s ${PREFIX}gccbug ${AFTFIX}gccbug
ln -s ${PREFIX}gcj ${AFTFIX}gcj
ln -s ${PREFIX}gcov ${AFTFIX}gcov
ln -s ${PREFIX}gdb ${AFTFIX}gdb
ln -s ${PREFIX}gfortran ${AFTFIX}gfortran
ln -s ${PREFIX}gprof ${AFTFIX}gprof
ln -s ${PREFIX}jcf-dump ${AFTFIX}jcf-dump
ln -s ${PREFIX}ld ${AFTFIX}ld
ln -s ${PREFIX}ldd ${AFTFIX}ldd
ln -s ${PREFIX}nm ${AFTFIX}nm
ln -s ${PREFIX}objcopy ${AFTFIX}objcopy
ln -s ${PREFIX}objdump ${AFTFIX}objdump
ln -s ${PREFIX}populate ${AFTFIX}populate
ln -s ${PREFIX}ranlib ${AFTFIX}ranlib
ln -s ${PREFIX}readelf ${AFTFIX}readelf
ln -s ${PREFIX}run ${AFTFIX}run
ln -s ${PREFIX}size ${AFTFIX}size
ln -s ${PREFIX}strings ${AFTFIX}strings
ln -s ${PREFIX}strip ${AFTFIX}strip

写完这个link.sh文件以后,我们执行一下

sh link.sh

这样我们就得到了整个使用标准名称的交叉编译工具链

CROSSTOOL-NG建立交叉编译工具链的更多相关文章

  1. arm-linux交叉编译工具链的制作(基于S3C2440)【转】

    本文转载自:http://eric-gao.iteye.com/blog/2160622 制作arm-linux交叉编译工具链一般通过crosstool工具或者crosstool-NG,前者使用方便, ...

  2. 【转】ARM交叉编译工具链

    原文网址:http://www.veryarm.com/cross-tools 为什么要用交叉编译器? 交叉编译通俗地讲就是在一种平台上编译出能运行在体系结构不同的另一种平台上的程序,比如在PC平台( ...

  3. Crosstool-ng制作交叉编译工具链

    Crosstool-ng制作交叉编译工具链 交叉编译器可以用现成的,比如CodeSourcery制作的交叉编译器,也可以自己制作,一般是用kernel+gcc+glibc+binutils的源码包来编 ...

  4. 利用Crosstool-ng制作交叉编译工具链

    1.什么是crosstool-ng crosstool-ng,全称是crosstool Next Generation,即下一代crosstool,即crosstool的升级版.那么什么是crosst ...

  5. 交叉编译工具链介绍《Building Embedded Linux Systems》

    1.前言 配置和编译一个合适的GNU工具链是相对复杂的并且需要很精细的操作,包括你需要对不同软件库之间的依赖关系.它们的各自的任务,不同软件库版本情况都有比较好的了解,编译工具链是一个乏味的工作. 2 ...

  6. archlinux安装交叉编译工具链

    1. 在/usr/local下新建文件夹:arm  [guo@archlinux local]$sudo mkdir arm 2. 将交叉编译工具拷贝到arm文件夹中  [guo@archlinux ...

  7. Linux ARM交叉编译工具链制作过程【转】

    本文转载自:http://www.cnblogs.com/Charles-Zhang-Blog/archive/2013/02/21/2920999.html 一.下载源文件 源代码文件及其版本与下载 ...

  8. 构建嵌入式Linux交叉编译工具链

    开源交叉编译工具链制作方法汇总: 1) 使用crosstool/crosstool-ng生成 2) 使用buildroot生成 ARM交叉编译工具链说明: 1) arm-linux-gcc是一个集合命 ...

  9. ARM交叉编译工具链分类说明

    转载整理自:http://www.veryarm.com/cross-tools 从授权上,ARM交叉编译工具链分为免费授权版和付费授权版. 免费版目前有三大主流工具商提供,第一是GNU(提供源码,自 ...

随机推荐

  1. C# 线程传参

    传参方式有两种: 1.创建带参构造方法类 传参 2.利用Thread.start(8)直接传参,该方法会接收一个对象,并将该对象传递给线程,因此在线程中启动的方法 必须接收object类型的单个参数. ...

  2. C#中 StringBuilder类 与 String类的区别---(转)

      在找工作的时候,去了些公司,避免不了要面试和笔试.不过一般最起初的是笔试.我印象中有这样有一道题目:StringBuilder类与 String类的区别?那时候我不太清楚这两个类的区别,今天在看代 ...

  3. 20141017--循环语句for 穷举

    穷举:把所有的可能性都列举一遍 1.羽毛球怕15元一个,球3元一个,水2元一瓶,一共有200元,每种至少一个,列出所有可能: 2.   50元钱,有面值2元,3元,5元,不要求每种至少一张,有多少种组 ...

  4. MYSQL基础02(查询)

    查询是很大的一块,所以这里我只会写mysql的特点,就我目前使用的情况,MYSQL对标准SQL是比较支持,如果是新手的话,建议去w3school 学习标准SQL. 1.DUAL DUAL是一个虚拟表, ...

  5. 16款最佳HTML5超酷动画演示及源码

    1.HTML5/CSS3图片选择动画 可选择多张图片 之前我们已经分享过几款很酷的HTML5图片特效,像HTML5 3D图片折叠特效.HTML5 3D旋转图片相册等应用.今天我们来分享一款既炫酷又实用 ...

  6. template_20_实现智能指针

    一:计数器二:析构和释放三:SmartPoint

  7. daily news新闻阅读客户端应用源码(兼容iPhone和iPad)

    daily news新闻阅读客户端应用源码(兼容iPhone和iPad),也是一款兼容性较好的应用,可以支iphone和ipad的阅读阅读器源码,设计风格和排列效果很不错,现在做新闻资讯客户端的朋友可 ...

  8. <a href="onclick="javascript:goSearch(this)" class="click" name="Java">Java</a>为什么a标签的父节点获取不到

    <script> function goSearch(event) { //var select = $('#keyInput').val($(event).attr("name ...

  9. 用jQuery解析复杂的xml结构文件

    一个晚上的心血 <?xml version="1.0" encoding="UTF-8"?> <weibo><wbContent& ...

  10. Android屏幕像素密度适配详解

    讲到像素密度,我们先要搞明白什么是像素密度,像素密度的字面上的意思为手机屏幕上一定尺寸区域内像素的个数.在Android开发中, 我们一般会使用每英寸像素密度(dpi)这样一个单位来表示手机屏幕的像素 ...