2010-02-05 100 views
1

我在玩PXA270 Xscale开发板(类似于Gumstix),并且提供了一个交叉编译器,但它是GCC 3.3.3。我想学习如何构建我自己的交叉编译器,所以我可以自定义这个设置,但是在获得crosstools和crosstools-ng成功构建工具链时遇到了困难。我的主要需求是使用GCC 4.2.X和使用软浮动的能力。我正在运行Ubuntu 9.有没有人对这样的系统建立工具链有任何建议或建议?关于为Xscale ARM构建交叉编译器的建议?

由于提前,

回答

2

www.gnuarm.cominstructions构建自己的ARM交叉编译器,以及二进制文件可供download。他们没有GCC 4.2.x,但是我使用与这些指令非常相似的步骤构建它,而没有太多问题。

为什么你想要软件浮点?这将会非常缓慢;大多数应用程序只需要使用固定点实现(读取:整数)。

+0

我正在使用第三方库,我无法访问源代码,因此无法将代码更改为固定点。根据 - http://wiki.debian。org/ArmEabiPort - “由于FPA浮点单元仅在极少数ARM内核中实现,现在FPA指令在内核中通过非法指令错误进行仿真,这当然效率很低:大约比-msoft-float慢10倍一个FIR测试程序“。 – user21293 2010-02-06 16:17:19

+0

如果您不能重新编译库,编译器中的软浮动支持不会对您有所帮助。如果您的核心没有用于浮点的硬件,但您的库包含FP指令,则必须按照您的链接提及并实现未定义的指令异常处理程序来模拟浮点操作。 – 2010-02-06 17:42:54

1

简短的回答,非常困难。较长的回答,继续尝试,你可能会偶然发现,但可能不会。具有硬浮点的Xscale更可能并且不使用任何浮点。我知道我尝试了很多组合并失败了。有一个原因,为什么你正在寻找的组合通常使用旧的gcc,最后一个工作。您可以查看codesourcery,看看他们有什么,使用那里的工具或了解他们的行为可能是您最好的选择。

1

我用Dan Kegel的crosstool来创建我的手臂交叉工具链。它花了几次尝试,但我最终能够把它做对。

我建议查看各种体系结构的build results矩阵,以帮助确定gcc,glibc,binutils和linux内核头文件的合适组合。

以下是我用来创建我的手臂交叉工具链的脚本。我意识到我的要求与您的要求有所不同,但您可能会对其进行修改以适应您的需求。

#!/bin/sh 

set -ex 

# Extract crosstool 
tar zxf crosstool-0.43.tar.gz 
ln -sf crosstool-0.43 crosstool 

# Create .dat file for toolchain 
cat <<EOF> $HOME/arm-cross.dat 

BINUTILS_DIR=binutils-2.15 
GCC_DIR=gcc-3.4.5 
GCC_EXTRA_CONFIG=--with-float=soft 
GCC_LANGUAGES=c,c++ 
GLIBC_ADDON_OPTIONS==linuxthreads, 
GLIBC_DIR=glibc-2.3.6 
GLIBC_EXTRA_CONFIG=--without-fp 
GDB_DIR=gdb-6.5 
KERNELCONFIG="\$HOME/crosstool/arm.config" 
LINUX_DIR=linux-2.6.12.6 
LINUX_SANITIZED_HEADER_DIR= 
SHARED_MODE=--enable-shared 
TARGET=arm-softfloat-linux-gnu 
TARGET_CFLAGS=-O 

BUILD_DIR="\$HOME/crosstool/build/\$TARGET/\$GCC_DIR-\$GLIBC_DIR" 
PREFIX="/usr/crossgnu/\$GCC_DIR-\$GLIBC_DIR/\$TARGET" 
SRC_DIR="\$HOME/crosstool/build/\$TARGET/\$GCC_DIR-\$GLIBC_DIR" 
TARBALLS_DIR="\$HOME/downloads" 
TOP_DIR="\$HOME/crosstool" 

EOF 

# Create toolchain directory 
sudo mkdir -p /usr/crossgnu 
sudo chown $USER /usr/crossgnu 

# Build toolchain 
pushd crosstool 
eval `cat $HOME/arm-cross.dat` sh all.sh --gdb --notest 
popd 

注:我曾在我从运行脚本的同一目录crosstool-0.43.tar.gz压缩包。

1

如果您无法使用crosstool *构建交叉编译器,那么如果没有它们,您不太可能这样做。这并不简单!

然而,你可以很容易地通过编辑/etc/apt/sources.list获得最近交叉编译器上的Ubuntu包括

 
deb http://www.emdebian.org/debian/ lenny main 

然后说

 
apt-get update 
apt-get install g{cc,++}-4.3-arm-linux-gnueabi