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的穿插编译环境。