2010-02-05 98 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