ARM-Linux交叉工具链制作

1. 首先从官方网站上下载crosstool-ng的源码包 http://ymorin.is-a-geek.org/download/crosstool-ng/crosstool-ng-1.11.1.tar.bz2

2. 将此源码包解压缩并编译安装

tar jxvf crosstool-ng-1.11.1.tar.bz2

cd crosstool-ng--1.11.1

./configure

make

sudo make install

注意:运行configure文件会提示一系列的工具没有安装,安装就是了,例如bison,flex,makeinfo(需要安装texinfo),automake(需要先安装autoconf),libtool,ncurses,libncurses-devel,安装方法:mount /dev/cdrom /mnt/cds,挂载到cds目录,然后在Packages目录下查找相关的软件,利用命令:rpm –ivh ****安装即可。安装成功后,运行configure文件的结果如下:

Checking for ‘grep‘... /bin/grep

Checking whether ‘/bin/grep‘ supports -E... yes

Checking for ‘sed‘... /bin/sed

Checking whether ‘/bin/sed‘ supports -i and -e... yes

Checking for ‘bash‘... /bin/bash

Checking for ‘cut‘... /usr/bin/cut

Checking for ‘install‘... /usr/bin/install

Checking for ‘make‘... /usr/bin/make

Checking for ‘gcc‘... /usr/bin/gcc

Checking for ‘awk‘... /usr/bin/awk

Checking for ‘bison‘... /usr/bin/bison

Checking for ‘flex‘... /usr/bin/flex

Checking for ‘makeinfo‘... /usr/bin/makeinfo

Checking for ‘automake‘... /usr/bin/automake

Checking for ‘libtool‘... /usr/bin/libtool

Checking for ‘stat‘... /usr/bin/stat

Checking for ‘curl‘... /usr/bin/curl

Checking for ‘cvs‘... /usr/bin/cvs

Checking for ‘patch‘... /usr/bin/patch

Checking for ‘tar‘... /bin/tar

Checking for ‘gzip‘... /usr/bin/gzip

Checking for ‘bzip2‘... /usr/bin/bzip2

Checking for ‘lzma‘... /usr/bin/lzma

Checking for ‘readlink‘... /usr/bin/readlink

Checking for ‘objcopy‘... /usr/bin/objcopy

Checking for ‘objdump‘... /usr/bin/objdump

Checking for ‘readelf‘... /usr/bin/readelf

Checking for ‘patch‘... /usr/bin/patch

Checking for ‘ncurses/ncurses.h‘... yes

Checking for ‘libncursesw.so‘... yes

Computing version string... 1.11.1

Building up Makefile... done

 

crosstool-NG configured as follows:

  PREFIX=‘/usr/local‘

  BINDIR=‘/usr/local/bin‘

  LIBDIR=‘/usr/local/lib/ct-ng-1.11.1‘

  DOCDIR=‘/usr/local/share/doc/ct-ng-1.11.1‘

  MANDIR=‘/usr/local/share/man‘

 

Now run:

  make

  make install

 

键入make:结果如下

SED    ‘ct-ng‘

  SED    ‘scripts/crosstool-NG.sh‘

  SED    ‘scripts/saveSample.sh‘

  SED    ‘scripts/showTuple.sh‘

  GEN    ‘paths.mk‘

  SED    ‘docs/ct-ng.1‘

  GZIP   ‘docs/ct-ng.1.gz‘

键入 make install:运行结果如下

INST    ‘ct-ng‘

  RMDIR   ‘/usr/local/lib/ct-ng-1.11.1/‘

  MKDIR   ‘/usr/local/lib/ct-ng-1.11.1/‘

  INSTDIR ‘config/‘

  INSTDIR ‘contrib/‘

  INSTDIR ‘kconfig/‘

  INSTDIR ‘patches/‘

  INSTDIR ‘scripts/‘

  INST    ‘steps.mk‘

  INST    ‘paths.mk‘

  INSTDIR ‘samples/‘

  MKDIR   ‘/usr/local/share/doc/ct-ng-1.11.1/‘

  INST    ‘docs/*.txt‘

  INST    ‘ct-ng.1.gz‘

 

For auto-completion, do not forget to install ‘ct-ng.comp‘ into

your bash completion directory (usually /etc/bash_completion.d)

 

当上述过程执行完毕后,cn-ng命令就可以用了。

3.配置自己的交叉工具链

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 进入配置菜单,这里稍作修改:

Paths and misc options  --->

......

(${HOME}/src)   Local tarballs directory  # 指定制作编译器所需要的源码包的下载存放,可以修改成任意位置,请注意权限。现在指定到~/src下。

......

(/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这样的编译器

当修改好后就可以编译了。

4.自动下载和编译

注意,在下载的过程中,有些软件包可能无法下载,这个时候,可以自己手动现下载到指定的文件夹(跟上一节的配置有关),一个小技巧就是可以查看下当前的crosstool版本需要哪些版本的软件包,将其下载放入指定的文件夹内即可。

安装成功后的结果如下:

[INFO ]  Performing some trivial sanity checks

[INFO ]  Build started 20150625.114507

[INFO ]  Building environment variables

[EXTRA]  Preparing working directories

[EXTRA]  Installing user-supplied crosstool-NG configuration

[EXTRA]  =================================================================

[EXTRA]  Dumping internal crosstool-NG configuration

[EXTRA]    Building a toolchain for:

[EXTRA]      build  = x86_64-unknown-linux-gnu

[EXTRA]      host   = x86_64-unknown-linux-gnu

[EXTRA]      target = arm-zk-linux-gnueabi

[EXTRA]  Dumping internal crosstool-NG configuration: done in 0.09s (at 00:04)

[INFO ]  =================================================================

[INFO ]  Retrieving needed toolchain components‘ tarballs

[INFO ]  Retrieving needed toolchain components‘ tarballs: done in 0.20s (at 00:04)

[INFO ]  =================================================================

[INFO ]  Extracting and patching toolchain components

[INFO ]  Extracting and patching toolchain components: done in 7.50s (at 00:12)

[INFO ]  =================================================================

[INFO ]  Installing GMP

[EXTRA]    Configuring GMP

[EXTRA]    Building GMP

[EXTRA]    Installing GMP

[INFO ]  Installing GMP: done in 84.65s (at 01:36)

[INFO ]  =================================================================

[INFO ]  Installing MPFR

[EXTRA]    Configuring MPFR

[EXTRA]    Building MPFR

[EXTRA]    Installing MPFR

[INFO ]  Installing MPFR: done in 22.99s (at 01:59)

[INFO ]  =================================================================

[INFO ]  Installing PPL

[EXTRA]    Configuring PPL

[EXTRA]    Building PPL

[EXTRA]    Installing PPL

[INFO ]  Installing PPL: done in 257.60s (at 06:17)

[INFO ]  =================================================================

[INFO ]  Installing CLooG/ppl

[EXTRA]    Configuring CLooG/ppl

[EXTRA]    Building CLooG/ppl

[EXTRA]    Installing CLooG/ppl

[INFO ]  Installing CLooG/ppl: done in 5.68s (at 06:23)

[INFO ]  =================================================================

[INFO ]  Installing binutils

[EXTRA]    Configuring binutils

[EXTRA]    Building binutils

[EXTRA]    Installing binutils

[INFO ]  Installing binutils: done in 70.85s (at 07:33)

[INFO ]  =================================================================

[INFO ]  Installing static core C compiler

[EXTRA]    Configuring static core C compiler

[EXTRA]    Building static core C compiler

[EXTRA]    Installing static core C compiler

[INFO ]  Installing static core C compiler: done in 162.04s (at 10:16)

[INFO ]  =================================================================

[INFO ]  Installing kernel headers

[EXTRA]    Installing kernel headers

[EXTRA]    Checking installed headers

[INFO ]  Installing kernel headers: done in 4.85s (at 10:20)

[INFO ]  =================================================================

[INFO ]  Installing C library headers & start files

[EXTRA]    Configuring C library

[EXTRA]    Installing C library headers

[EXTRA]    Installing C library start files

[INFO ]  Installing C library headers & start files: done in 42.90s (at 11:03)

[INFO ]  =================================================================

[INFO ]  Installing shared core C compiler

[EXTRA]    Configuring shared core C compiler

[EXTRA]    Building shared core C compiler

[EXTRA]    Installing shared core C compiler

[INFO ]  Installing shared core C compiler: done in 189.29s (at 14:13)

[INFO ]  =================================================================

[INFO ]  Installing C library

[EXTRA]    Configuring C library

[EXTRA]    Building C library

[EXTRA]    Installing C library

[27:05] |

[INFO ]  Installing C library: done in 779.85s (at 27:12)

[INFO ]  =================================================================

[INFO ]  Installing final compiler

[EXTRA]    Configuring final compiler

[EXTRA]    Building final compiler

[28:42] \

[EXTRA]    Installing final compiler

[INFO ]  Installing final compiler: done in 546.82s (at 36:19)

[INFO ]  =================================================================

[INFO ]  Installing libelf for the target

[EXTRA]    Configuring libelf

[EXTRA]    Building libelf

[EXTRA]    Installing libelf

[INFO ]  Installing libelf for the target: done in 5.61s (at 36:25)

[INFO ]  =================================================================

[INFO ]  Installing binutils for target

[EXTRA]    Configuring binutils for target

[EXTRA]    Building binutils‘ libraries (libiberty bfd) for target

[EXTRA]    Installing binutils‘ libraries (libiberty bfd) for target

[INFO ]  Installing binutils for target: done in 112.11s (at 38:17)

[INFO ]  =================================================================

[INFO ]  Installing dmalloc

[EXTRA]    Configuring dmalloc

[EXTRA]    Building dmalloc

[EXTRA]    Installing dmalloc

[INFO ]  Installing dmalloc: done in 8.71s (at 38:26)

[INFO ]  =================================================================

[INFO ]  Installing D.U.M.A.

[EXTRA]    Copying sources

[EXTRA]    Building libraries ‘libduma.a libduma.so.0.0.0‘

[EXTRA]    Installing libraries ‘libduma.a libduma.so.0.0.0‘

[EXTRA]    Installing shared library link

[EXTRA]    Installing wrapper script

[INFO ]  Installing D.U.M.A.: done in 2.81s (at 38:29)

[INFO ]  =================================================================

[INFO ]  Installing cross-gdb

[EXTRA]    Configuring cross-gdb

[EXTRA]    Building cross-gdb

[EXTRA]    Installing cross-gdb

[INFO ]  Installing cross-gdb: done in 173.96s (at 41:23)

[INFO ]  =================================================================

[INFO ]  Installing native gdb

[EXTRA]    Building static target ncurses

[EXTRA]    Building static target expat

[EXTRA]    Configuring native gdb

[EXTRA]    Building native gdb

[EXTRA]    Installing native gdb

[EXTRA]    Cleaning up ncurses

[INFO ]  Installing native gdb: done in 301.57s (at 46:24)

[INFO ]  =================================================================

[INFO ]  Installing gdbserver

[EXTRA]    Configuring gdbserver

[EXTRA]    Building gdbserver

[EXTRA]    Installing gdbserver

[INFO ]  Installing gdbserver: done in 8.61s (at 46:33)

[INFO ]  =================================================================

[INFO ]  Installing ltrace

[EXTRA]    Copying sources to build dir

[EXTRA]    Configuring ltrace

[EXTRA]    Building ltrace

[EXTRA]    Installing ltrace

[INFO ]  Installing ltrace: done in 4.36s (at 46:37)

[INFO ]  =================================================================

[INFO ]  Installing strace

[EXTRA]    Configuring strace

[EXTRA]    Building strace

[EXTRA]    Installing strace

[INFO ]  Installing strace: done in 16.56s (at 46:54)

[INFO ]  =================================================================

[INFO ]  Cleaning-up the toolchain‘s directory

[INFO ]    Stripping all toolchain executables

[EXTRA]    Installing the populate helper

[EXTRA]    Installing a cross-ldd helper

[EXTRA]    Creating toolchain aliases

[EXTRA]    Removing access to the build system tools

[INFO ]  Cleaning-up the toolchain‘s directory: done in 4.10s (at 46:58)

[INFO ]  Build completed at 20150625.123205

[INFO ]  (elapsed: 46:58.12)

[INFO ]  Finishing installation (may take a few seconds)...

5.安装交叉编译器并测试

注意:这里我的编译器所在位置为${home}/x-tool/arm-zk-linux-gnueabi/bin,由ct-ng menuconfig可以看出如下:

进入编译器所在目录:/root/x-tools/arm-zk-linux-gnueabi/bin

执行如下命令:./arm-zk-linux-gnueabi-gcc-4.4.4 –v

输入结果如下:

Using built-in specs.

Target: arm-zk-linux-gnueabi

Configured with: /usr/src/crosstool-ng-1.11.1/.build/src/gcc-4.4.4/configure --build=x86_64-build_unknown-linux-gnu --host=x86_64-build_unknown-linux-gnu --target=arm-zk-linux-gnueabi --prefix=/root/x-tools/arm-zk-linux-gnueabi --with-sysroot=/root/x-tools/arm-zk-linux-gnueabi/arm-zk-linux-gnueabi/sysroot
--enable-languages=c,c++,fortran --disable-multilib --with-float=soft --with-pkgversion=crosstool-NG-1.11.1 --disable-sjlj-exceptions --enable-__cxa_atexit --disable-libmudflap --disable-libgomp --disable-libssp --with-gmp=/usr/src/crosstool-ng-1.11.1/.build/arm-zk-linux-gnueabi/build/static
--with-mpfr=/usr/src/crosstool-ng-1.11.1/.build/arm-zk-linux-gnueabi/build/static --with-ppl=/usr/src/crosstool-ng-1.11.1/.build/arm-zk-linux-gnueabi/build/static --with-cloog=/usr/src/crosstool-ng-1.11.1/.build/arm-zk-linux-gnueabi/build/static --with-host-libstdcxx=‘-static-libgcc
-Wl,-Bstatic,-lstdc++,-Bdynamic -lm‘ --enable-threads=posix --enable-target-optspace --with-local-prefix=/root/x-tools/arm-zk-linux-gnueabi/arm-zk-linux-gnueabi/sysroot --disable-nls --enable-symvers=gnu --enable-c99 --enable-long-long

Thread model: posix

gcc version 4.4.4 (crosstool-NG-1.11.1)

表明交叉工具安装成功了。。。。。

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

export PATH=$PATH:/root/x-tools/arm-zk-linux-gnueabi/bin

为了使得这个PATH生效,我们可以执行一下~/.bashrc文件:source ~/.bashrc;

这样就可以直接在命令行下使用arm-zk-linux-gcc命令了。

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

我们在使用交叉编译器的时候一般是采用arm-zk-linux-gnueabi这样的命令的,但是很多标准Makefile需要实用标准的交叉编译器的名称,一般这个名称是arm-linux-gcc这样的。

cd /root/x-tools/arm-zk-linux-gnueabi/bin     //注意已经要进入安装目录

新建一个脚本link.sh,建立一些软链接

#!/bin/sh

PREFIX=arm-zk-linux-gnueabi-

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

然后执行 sh link.sh。就可以使用arm-linux-gcc这样的命令了。

大功告成啦啦啦

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-03 22:13:40

ARM-Linux交叉工具链制作的相关文章

嵌入式linux交叉工具链的简单使用

交叉工具链 对于一个简单的hello.c程序 #include<stdio.h> void main() { printf("hello world ->\n"); } 我们在Linux编译时使用gcc gcc hello.c -o hello  (-o重命名):但是编译后拷贝到arm里面无法使用,我们需要专门的编译器来编译,我们将写好的程序hello.c在 Linux里面不在使用gcc编译了,使用arm-gcc来编译了 arm-linux-gcc hello.c -

嵌入式交叉工具链编译

读者可能会有疑问,为什么要用交叉编译器?交叉编译通俗地讲就是在一种平台上编译出能运行在体系结构不同的另一种平台上的程序,比如在PC平台 (X86 CPU)上编译出能运行在以ARM为内核的CPU平台上的程序,编译得到的程序在X86 CPU平台上是不能运行的,必须放到ARM CPU平台上才能运行,虽然两个平台用的都是Linux系统.这种方法在异平台移植和嵌入式开发时非常有用.相对与交叉编译,平常做的编译叫本地编译,也 就是在当前平台编译,编译得到的程序也是在本地执行.用来编译这种跨平台程序的编译器就

Linux下获取arm的交叉编译工具链

转载请注明文章:Linux下获取arm的交叉编译工具链 出处:多客博图 这里介绍,Linux下获取arm的交叉编译工具链,比如arm-linux-gnueabihf-gcc.arm-linux-gneabihf-gcc等. 前言 这里有一个专门的说法: “arm-linux-gnueabihf-gcc是由 Linaro 公司基于GCC推出的的ARM交叉编译工具.可用于交叉编译ARM系统中所有环节的代码,包括裸机程序.u-boot.Linux kernel.filesystem和App应用程序.使

自己制作ARM-Linux交叉工具链

学习嵌入式嘛,就得自己多动手,多实践.入门的话,自己配置开发环境,移植内核这些.开发环境就不说了,移植内核首先就得编译内核.就得有编译器.由于ARM cpu的体系结构与x86不一样.通常的做法就是在 x86 开发平台使用ARM交叉编译器来编译内核,再移植到开发板上.制作交叉工具链是个仔细的活,既繁琐又有难度.网上推荐的做法是新手使用别人制作好的工具链,等以后经验多了,再来仔细研究这个.不知道为什么我就硬着头皮上了,结果花了一个星期还是倒腾出来了,算是有收获.所以这篇博文就简单记录一下,内容不涉及

【嵌入式开发】 嵌入式开发工具简介 (裸板调试示例 | 交叉工具链 | Makefile | 链接器脚本 | eclipse JLink 调试环境)

作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42239705  参考博客 : [嵌入式开发]嵌入式 开发环境 (远程登录 | 文件共享 | NFS TFTP 服务器 | 串口连接 | Win8.1 + RedHat Enterprise 6.3 + Vmware11) 开发环境 : -- 操作系统 : Vmware11 + RedHat6.3 企业版 + Win8.1; -- 硬件 : OK-6410-A 开发

arm-none-linux-gnueabi交叉工具链安装 ,介绍,区别总结

1.arm-none-linux-gnueabi-gcc下载 http://www.veryarm.com/arm-none-linux-gnueabi-gcc arm-none-linux-gnueabi-gcc是 Codesourcery 公司(目前已经被Mentor收购)基于GCC推出的的ARM交叉编译工具.可用于交叉编译ARM系统中所有环节的代码,包括裸机程序.u-boot.Linux kernel.filesystem和App应用程序.使用时,按照主机平台,可以下载以下任一版本中的一个

2.交叉工具链

2.交叉工具链 一.交叉工具链: 交叉工具链,其实他有两个含义,一个就是交叉工具,所谓的交叉工具就是运行的环境和编译的环境不是在一体的.就像我们现在,编译裸机程序是在pc机上面执行的.可我们运行程序是在开发板.链,就是很多的意思,就是一个工具的集合.在我们前面配置arm-linux-gcc的工具中.在/usr/local/arm/4.3.2/bin的目录下有很多编译工具.例如图1-1: 图1.-1 交叉工具链 下面我们来写一个简单的程序,用这些工具编译. Hello.c: #include <s

[国嵌笔记][016][交叉工具链]

交叉工具链 1.交叉工具是编译在arm平台上运行程序的工具,交叉工具链是交叉工具的集合 2.file filename 通过file命令可以查看程序运行的平台等相关信息 3.交叉开发 1.在x86平台上产生其他平台上运行程序的模式叫做交叉开发 2.宿主机是产生嵌入式软件的平台,目标机是运行嵌入式软件的平台 常用的交叉工具 1.交叉编译器 arm-linux-gcc 相同之处 arm-linux-gcc file.c -o file 与gcc用法上一样 不同之处 gcc从 /usr/include

5.3交叉工具链使用

实验三 交叉工具链使用 实验目的 1.掌握交叉工具链的安装.配置方法 2.掌握交叉编译.调试方法 实验要求 安装.配置arm-linux交叉工具链 交叉编译"输入-回显"程序: 将程序"嵌入"到开发板运行: ? 实验步骤 一.安装.配置arm-linux交叉工具链 1.将教学资源\toochain目录内的交叉工具链压缩包通过SMB共享拷贝到Linux宿主机 ? 2.将工具链软件包加压到根目录 3.将工具链bin目录加入PATH环境变量 打开配置文件: 添加到最后的信