linux top交叉编译_Linux 系统下ARM Linux交叉编译环境crosstool工具

本文介绍了在Linux系统下建立ARM Linux交叉编译环境的三种方法,重点讲述了使用crosstool-0.43工具进行编译的详细步骤,包括配置源码位置、设置目标选项、修改相关脚本等,以生成arm-linux-gcc等交叉编译工具。
摘要由CSDN通过智能技术生成

Linux系统下ARM Linux交叉编译环境的建立目前流行的有三种途径。

一、使用别人编译好的开发工具链本文引用地址:http://www.eepw.com.cn/article/201611/317983.htm

cross-2.95.3.tar.bz2

arm-linux-gcc-3.3.2.tar.bz2

arm-elf-tools-20030314.sh。

其中arm-elf-tools是专门用来编译uclinux内核的。我们常用的cross-cross-2.95.3,下载cross-2.95.3.tar.bz2解压后放到/usr/local/arm目录下设置下PATH即可使用,这是最方便快捷的方式,缺点是cross-2.95.3 GCC版本是2.95.3,版本较低,不能编译2.6版本的Linux内核和版本较高的u-boot。cross-2.95.3.tar.bz2一般是交叉编译2.4的linux内核的,而arm-linux-gcc-3.3.2.tar.bz2一般是交叉编译2.6版本的内核的。

二、自己动手慢慢编译。

这个方法是最麻烦的,需要下载很多源文件,步骤多比较繁琐,成功率不高,极其容易出错,即使是经验丰富程序员,自己编译一套完整的工具链也是很难成功的。

三、建立交叉编译工具的途径是使用crosstool-0.43或buildroot来编译。

如果是基于gcc和glibc来制作工具链,则使用crosstool来编译,如果要基于gcc和uClibc来制作工具链,可以使用buildroot来进行编译。

uClibc比glibc小,在已有的接口上是兼容的,更适合嵌入式系统,单uClibc没包括glibc中的所以的接口实现。

使用crosstool工具(crosstool-0.43.tar.gz)

$tar zxvf crosstool-0.43.tar.gz

$cd crosstool-0.43

$cp glibc-2.3.6-version-info.h_err.patchcrosstool-0.43/patches/glibc-2.3.6/

/* glibc-2.3.6-version-info.h_err.patch为补丁程序*/

打开脚本demo-arm-softfloat.sh(具体使用那个sh文件根据硬件确定)

#!/bin/sh

# This script has one line for each known working toolchain

# for this architecture.Uncomment the one you want.

# Generated by generate-demo.pl from buildlogs/all.dats.txt

set -ex

TARBALLS_DIR=$HOME/downloads/*表示源码存放的位置*/

RESULT_TOP=/opt/crosstool/*表示编译结果存放的位置*/

export TARBALLS_DIR RESULT_TOP

GCC_LANGUAGES="c,c++"/*表示制作出的工具链支持C、C++语言,如果想支持其他语言可以在里面增加如java可以GCC_LANGUAGES="c,c++,java"*/

export GCC_LANGUAGES

# Really, you should do the mkdir before running this,

# and chown /opt/crosstool to yourself so you dont need to run as root.

mkdir -p $RESULT_TOP/*建立目录*/

#eval `cat arm-softfloat.dat gcc-2.95.3-glibc-2.1.3.dat` sh all.sh --notest

#eval `cat arm-softfloat.dat gcc-2.95.3-glibc-2.2.2.dat` sh all.sh --notest

#eval `cat arm-softfloat.dat gcc-2.95.3-glibc-2.2.5.dat` sh all.sh --notest

#eval `cat arm-softfloat.dat gcc-3.2.3-glibc-2.2.5.dat` sh all.sh --notest

#eval `cat arm-softfloat.dat gcc-3.2.3-glibc-2.3.2.dat` sh all.sh --notest

#eval `cat arm-softfloat.dat gcc-3.2.3-glibc-2.3.2-tls.dat` sh all.sh --notest

#eval `cat arm-softfloat.dat gcc-3.3.6-glibc-2.2.2.dat` sh all.sh --notest

#eval `cat arm-softfloat.dat gcc-3.3.6-glibc-2.2.5.dat` sh all.sh --notest

#eval `cat arm-softfloat.dat gcc-3.3.6-glibc-2.3.2.dat` sh all.sh --notest

#eval `cat arm-softfloat.dat gcc-3.3.6-glibc-2.3.2-tls.dat` sh all.sh --notest

#eval `cat arm-softfloat.dat gcc-3.4.5-glibc-2.2.5.dat` sh all.sh --notest

#eval `cat arm-softfloat.dat gcc-3.4.5-glibc-2.3.5.dat` sh all.sh --notest

eval `cat arm-softfloat.dat gcc-3.4.5-glibc-2.3.6.dat` sh all.sh --notest

/*这个是会生成的版本、注意gcc-3.4.5-glibc-2.3.6.dat、arm-softfloat.dat和all.sh他们是三个相关的shell文件,下面分别介绍*/

echo Done.

1、demo-arm-softfloat.sh中修改

TARBALLS_DIR=/work/tools/create_crosstools/src_gcc_glibc/*修改源码存放的位置,包括gcc-3.4.5-glibc-2.3.6.dat所包含的所有包,如果可以上网,执行$ ./demo-arm-softfloat.sh后可以自行下载*/

RESULT_TOP=/opt/crosstool/*修改编译结果存放的位置*/

2、arm-softfloat.dat

KERNELCONFIG=`pwd`/arm.config

TARGET=arm-softfloat-linux-gnu/*编译出来的样式为arm-softfloat-linux-gnu,把它修改成TARGET=arm-linux,编译出来的样式为arm-linux-gcc、arm-linux-ld等*/

TARGET_CFLAGS="-O"

GCC_EXTRA_CONFIG="--with-float=soft"

GLIBC_EXTRA_CONFIG="--without-fp"

3、all.sh

PREFIX=${PREFIX-$RESULT_TOP/$TOOLCOMBO/$TARGET}

修改成

PREFIX=${PREFIX-$RESULT_TOP/$TOOLCOMBO}

/*把原来最终结果存放在/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux下改为/work/tools/gcc-3.4.5-glibc-2.3.6/*/

其中TARGET在arm-softfloat.dat定义的

4、gcc-3.4.5-glibc-2.3.6.dat

BINUTILS_DIR=binutils-2.15

GCC_DIR=gcc-3.4.5

GLIBC_DIR=glibc-2.3.6

LINUX_DIR=linux-2.6.8 (可以修改内核版本)

LINUX_SANITIZED_HEADER_DIR=linux-libc-headers-2.6.12.0

GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.6

GLIBC_EXTRA_CONFIG="$GLIBC_EXTRA_CONFIG --with-tls --with-__thread--enable-kernel=2.4.18"

以上所提到的就是生成交叉编译器所需要的压缩包的版本。

5、进入crosstool-0.43

$ cd crosstools-0.43

$ ./demo-arm-softfloat.sh

/*执行,经过2、3小时后在/work/tools/目录下生成gcc-3.4.5-glibc-2.3.6子目录,交叉编译器、库、头文件都在里面,设置PATH环境变量即可*/

$ arm-linux-gcc –v/*测试*/可能的错误:ubuntu中默认gcc的版本是,对于crosstools0.43而言gcc可能太新了。解决的办法很简单:装个gcc4.1,然后把/usr/bin/gcc的link由gcc4.2指向4.1即可。sudoapt-getinstallgcc-4.1ls-l/usr/bin/gcc#你可以看看现在的gcc指向哪里sudorm/usr/bin/gccsudoln-s/usr/bin/gcc-4.1/usr/bin/gcc附录:binutils是二进制文件的处理工具,它主要包含了一些辅助开发工具,例如,objdump显示反汇编码、nm列出符号表、readelf显示elf文件信息及段信息、strip将不必要的代码去掉以减少可执行文件大小等。这些工具在嵌入式开发初期,尤其是在移植调试操作系统时非常有用。gcc是编译工具,用来编译内核代码的工具,使用它可以编译汇编语言和c语言的程序,生成arm的代码。glibc是链接和运行库,它的编译需要指定编译器为arm交叉编译器,否则编译出的glibc代码将会是同时有arm和x86代码的混合体。所有需要用到的工具都可以通过下载源码自行编译,然后在宿主机上进行安装,就可以建立起arm的交叉编译环境。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值