您的位置 首页 解答

Linux 体系下ARM Linux穿插编译环境crosstool东西

Linux系统下ARMLinux交叉编译环境的建立目前流行的有三种途径。一、使用别人编译好的开发工具链cross-2.95.3.tar.bz2arm-linux-gcc-3.3.2…

Linux体系下ARM Linux穿插编译环境的树立现在盛行的有三种途径。

一、运用他人编译好的开发东西链

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.1
ls-l/usr/bin/gcc#你能够看看现在的gcc指向哪里
sudorm/usr/bin/gcc
sudoln-s/usr/bin/gcc-4.1/usr/bin/gcc
附录: 
binutils是二进制文件的处理东西,它首要包括了一些辅佐开发东西,例如,objdump显现反汇编码、nm列出符号表、readelf显现elf文件信息及段信息、strip将不必要的代码去掉以削减可履行文件巨细等。这些东西在嵌入式开发初期,尤其是在移植调试操作体系时十分有用。 
  gcc是编译东西,用来编译内核代码的东西,运用它能够编译汇编言语和c言语的程序,生成arm的代码。 
  glibc是链接和运行库,它的编译需求指定编译器为arm穿插编译器,不然编译出的glibc代码将会是一起有arm和x86代码的混合体。一切需求用到的东西都能够经过下载源码自行编译,然后在宿主机上进行装置,就能够树立起arm的穿插编译环境。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/jieda/277311.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部