关于为 Xscale ARM 构建交叉编译器的建议?

Posted

技术标签:

【中文标题】关于为 Xscale ARM 构建交叉编译器的建议?【英文标题】:Advice on building a cross-compiler for Xscale ARM? 【发布时间】:2011-01-13 12:50:15 【问题描述】:

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

提前致谢,

【问题讨论】:

【参考方案1】:

www.gnuarm.com 具有用于构建您自己的 ARM 交叉编译器的 instructions 以及可用于 download 的二进制文件。他们那里没有 GCC 4.2.x,但我使用与这些说明非常相似的步骤构建了它,没有太多问题。

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

【讨论】:

我正在使用第三方库,我无法访问源代码,因此无法将代码更改为定点。根据-wiki.debian.org/ArmEabiPort-“由于 FPA 浮点单元仅在很少的 ARM 内核中实现,现在 FPA 指令通过非法指令错误在内核中模拟。这当然非常低效:比 -msoft 慢大约 10 倍-float 用于 FIR 测试程序。" 如果你不能重新编译这个库,你的编译器中的软浮动支持对你没有帮助。如果您的内核没有用于浮点的硬件,但您的库包含 FP 指令,则您必须按照链接所述执行未定义的指令异常处理程序来模拟浮点操作。【参考方案2】:

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

【讨论】:

【参考方案3】:

我使用 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 压缩包位于我运行脚本的同一目录中。

【讨论】:

【参考方案4】:

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

但是,您可以通过编辑 /etc/apt/sources.list 来包含最轻松的最新交叉编译器到 Ubuntu 上

debhttp://www.emdebian.org/debian/lenny main

然后说

apt-get 更新 apt-get install gcc,++-4.3-arm-linux-gnueabi

【讨论】:

【参考方案5】:

我也使用了crosstool,并且能够在Cygwin下构建一个arm-xscale-linux-gcc。说明在这里:http://sourceforge.net/apps/mediawiki/imote2-linux/index.php?title=ToolsGccArm

【讨论】:

以上是关于关于为 Xscale ARM 构建交叉编译器的建议?的主要内容,如果未能解决你的问题,请参考以下文章

关于Linux上的arm-linux交叉编译工具链的问题:但是arm也有很多种啊! 这个工具是对所有的ARM都支持吗?

在ubuntu上交叉编译Boost 1.57.0 for arm

intel sycl 支持提前编译和交叉编译ARM?

为 ARM 交叉编译 OpenSSH

为 ARM 交叉编译 ActiveMQ

为arm64交叉编译googletest