Frage

Ein ähnliches (weniger beschreibend) Beitrag ist hier .

Ich versuche, meine eigene Werkzeugkette mit den letzten Versionen auf Ubuntu zu rollen und hatte gehofft, dass es genug von einer Linux-Gemeinde war hier, dass ich spezifische Beratung über bestimmte Probleme bekommen könnte, wie sie kommen.

Mit jeder Hilfe Ich mag diese wiederum in eine nützliche Referenz sehen, schließlich.

Als erstes „ cross “, auf die fast jeder bezieht, ist ein wenig (2006) veraltet und „ crosstool-NG “, die nun die Fackel tragen zu scheint versagt auf meinem Rechner. Ich würde eher debuggen den Prozess selbst als ein Skript (was es scheinen würde, verlangt von mir, den Prozess zu verstehen).

Im Folgenden sind grundlegende Schritte von dem, was ich bisher hätte arbeiten; derzeit bin ich stecken versuchen, den ersten Durchgang GCC zu kompilieren.

Wo es versagt ...

Es wird scheitern, weil das Kreuz kompilierte Bibliothek „crti.o“ enthält, fehlt:

# ./gcc-4.4.1/configure --target=arm-linux --disable-thread --enable-langauges=c 
/bin/bash ../../../gcc-4.4.1/libgcc/../mkinstalldirs .
/usr/src/gnu-4.4.1-build/./gcc/xgcc -B ........
/usr/local/arm-linux/bin/ld: crti.o No such file: No such file or directory
collect2: ld returned 1 exit status
make[2]: *** [libgcc_s.so] Error 1
make[2]: Leaving directory `/usr/src/gnu/gcc-4.4.1-build/arm-linux/libgcc'
make[1]: *** [all-target-libgcc] Error 2
make[1]: Leaving directory `/usr/src/gnu/gcc-4.4.1-build'
make: *** [all] Error 2

Schritte beim Aufbau

Auf einem ‚frisch‘ konfiguriert Ubuntu 9.04 Installation, hier sind die Schritte, die ich bisher gemacht habe:

#New configuration of Ubuntu 9.04
sudo updatedb
sudo apt-get install build-essential subversion
# For kernel configuration
sudo apt-get install libncurses5-dev
# For building GCC
sudo apt-get install libgmp3-dev libmpfr-dev

#Get Linux Headers for GCC/GLIBC compilations
# I use a hacked Linux from Artilla, 
pushd ~ && svn co http://.../linux m501-linux && cd !$
make ARCH=arm m501_defconfig
make ARCH=arm menuconfig
sudo mkdir /usr/local/arm-linux/include
sudo cp -dR include/asm-arm /usr/local/arm-linux/include/asm
sudo cp -dR include/linux /usr/local/arm-linux/include/linux
cd /usr/local/arm-linux/
sudo ln -s include sys-include
popd

#Get sources:
cd /usr/src/
sudo su root
mkdir gnu
ftp ftp.gnu.org
# get gnu/binutils/binutils-2.19.1.tar.bz2
# get gnu/gcc/gcc-4.4.1/gcc-4.4.1.tar.bz2
# get gnu/glibc/glibc-2.10.1.tar.bz2
# get gnu/gdb/gdb-6.8.tar.bz2

#Build Binutils
bzcat binutils-2.19.1.tar.bz2 | tar -xv
mkdir binutils-2.19.1-build && cd !$
cp ../binutils-2.19.1/gas/config/tc-arm.c ./tc-arm.c 
sed -r 's/(as_bad[ \t]*\()(.+\[.+\]\))/\1\"%s\",\2/' < ./tc-arm.c > ../binutils-2.19.1/gas/config/tc-arm.c 
rm ./tc-arm.c    
../binutils-2.19.1/configure --target=arm-linux
make && make install && cd ..

#Build GCC
bzcat gcc-4.4.1.tar.bz2 | tar -xv
mkdir gcc-4.4.1-build && cd !$
../gcc-4.4.1/configure --target=arm-linux --disable-thread --enable-langauges=c -with-headers=/usr/local/arm-linux/include
make
War es hilfreich?

Lösung 7

Das war ein bisschen rot-Hering. Offenbar Quer compling eine Werkzeugkette für ein bestehendes System mit einem Arbeits GLIBC nicht GLIBC erfordert neu kompiliert werden. Ich weiß ehrlich nicht, wie ich diese Tatsache ignoriert.

So, obwohl ich immer noch nicht weiß, wie GCC überqueren kompilieren und GLIBC, da ich nur GCC brauche ich werde dies markieren als geschlossen.

Wenn ich kann, werde ich auf dieses Thema zurückkommen und markieren, was ich tat schließlich.

EDIT:

Zur Kasse this .

Andere Tipps

Willkommen , sie ist nicht allein.

Die Geschichte

Ich weiß nicht, warum ARM Cross-Compilierung so ein Alptraum ist. Es ist nicht meine Meinung, mal sehen, was andere sagen ...

  

Einen gcc / glibc Cross-Toolchain   für den Einsatz in Embedded-Systemen   Entwicklung verwendet, um eine unheimlich zu sein   Aussicht, erfordern eiserner Wille, Tage, wenn   nicht Wochen Mühe, viele Unix und   Gnu Überlieferung, und manchmal Bereitschaft   nehmen zwielichtige Verknüpfungen. ( http://www.kegel.com/crosstool/ )

Meine ARM Computer (Guruplug) auf Debian laufen, so brauche ich nur eine Standard-G ++ Compiler, ohne zwickt.

Ich bin mit 32-Bit-Ubuntu auf meinem Notebook. Es gibt deb-Pakete für AVR Cross-Compiler, oder sogar für Z80, aber keiner für ARM - warum? OK, wir müssen eine kompilieren. Lass uns gehen. Der Übersetzungsvorgang des Werkzeugkette ist ein bisschen für mich verwirrend. 14k Zeilen lang Makefile, danke.

Nach einigen Tagen (und Nächten) Ich versagt haben.

Die Lösung

Schließlich habe ich eine out-of-the-Box soluion gefunden. Ich habe gerade die Lite Edition dieses Zeug heruntergeladen http://www.codesourcery.com/ SGPP / lite_edition.html und ich bin jetzt glücklich. Es hat eine hässliche Installer, aber es funktioniert. Es sagt: arm-none-linux-gnueabi-g ++ (Sourcery G ++ Lite 2010q1-202) 4.4.1 , das ist eine up-to-date G ++ Version.

(Mein Freund hat einen Mac, und er hat es versäumt, auch die Toolchain kompilieren nach für eine Woche mit ihm zu kämpfen. Er ist jetzt mit diesen Compiler auf einer VM mit Ubuntu).

Sie sollten wirklich haben mehr Mühe mit der Verwendung von crosstool-NG, da der crossMailingListe sehr reaktiv ist. Da den gesamten Prozess zu verstehen, eine große Aufgabe ist, zu verstehen, wie ein Werkzeug verwenden, die Sie wieder verwenden könnten, ist IMHO interessanter.

Hier ist die helenos Arm-32-Toolchain Installationsskript, sollte dies tun, was Sie mit sehr wenig Fummelei wollen. Ich verwende es auf Ubuntu jetzt (ich bin einer der helenos Entwickler). Es wurde von Martin Decky geschrieben:

#!/bin/bash

# Cross-Compiler Toolchain for ${PLATFORM}
#  by Martin Decky <martin@decky.cz>
#
#  GPL'ed, copyleft
#


check_error() {
    if [ "$1" -ne "0" ]; then
        echo
        echo "Script failed: $2"
        exit
    fi
}

if [ -z "${CROSS_PREFIX}" ] ; then
    CROSS_PREFIX="/usr/local"
fi

BINUTILS_VERSION="2.19.1"
GCC_VERSION="4.3.3"

BINUTILS="binutils-${BINUTILS_VERSION}.tar.gz"
GCC_CORE="gcc-core-${GCC_VERSION}.tar.bz2"
GCC_OBJC="gcc-objc-${GCC_VERSION}.tar.bz2"
GCC_CPP="gcc-g++-${GCC_VERSION}.tar.bz2"

BINUTILS_SOURCE="ftp://ftp.gnu.org/gnu/binutils/"
GCC_SOURCE="ftp://ftp.gnu.org/gnu/gcc/gcc-${GCC_VERSION}/"

PLATFORM="arm"
WORKDIR=`pwd`
TARGET="${PLATFORM}-linux-gnu"
PREFIX="${CROSS_PREFIX}/${PLATFORM}"
BINUTILSDIR="${WORKDIR}/binutils-${BINUTILS_VERSION}"
GCCDIR="${WORKDIR}/gcc-${GCC_VERSION}"
OBJDIR="${WORKDIR}/gcc-obj"

echo ">>> Downloading tarballs"

if [ ! -f "${BINUTILS}" ]; then
    wget -c "${BINUTILS_SOURCE}${BINUTILS}"
    check_error $? "Error downloading binutils."
fi
if [ ! -f "${GCC_CORE}" ]; then
    wget -c "${GCC_SOURCE}${GCC_CORE}"
    check_error $? "Error downloading GCC Core."
fi
if [ ! -f "${GCC_OBJC}" ]; then
    wget -c "${GCC_SOURCE}${GCC_OBJC}"
    check_error $? "Error downloading GCC Objective C."
fi
if [ ! -f "${GCC_CPP}" ]; then
    wget -c "${GCC_SOURCE}${GCC_CPP}"
    check_error $? "Error downloading GCC C++."
fi

echo ">>> Creating destionation directory"
if [ ! -d "${PREFIX}" ]; then
    mkdir -p "${PREFIX}"
    test -d "${PREFIX}"
    check_error $? "Unable to create ${PREFIX}."
fi

echo ">>> Creating GCC work directory"
if [ ! -d "${OBJDIR}" ]; then
    mkdir -p "${OBJDIR}"
    test -d "${OBJDIR}"
    check_error $? "Unable to create ${OBJDIR}."
fi

echo ">>> Unpacking tarballs"
tar -xvzf "${BINUTILS}"
check_error $? "Error unpacking binutils."
tar -xvjf "${GCC_CORE}"
check_error $? "Error unpacking GCC Core."
tar -xvjf "${GCC_OBJC}"
check_error $? "Error unpacking GCC Objective C."
tar -xvjf "${GCC_CPP}"
check_error $? "Error unpacking GCC C++."

echo ">>> Compiling and installing binutils"
cd "${BINUTILSDIR}"
check_error $? "Change directory failed."
./configure "--target=${TARGET}" "--prefix=${PREFIX}" "--program-prefix=${TARGET}-" "--disable-nls"
check_error $? "Error configuring binutils."
make all install
check_error $? "Error compiling/installing binutils."

echo ">>> Compiling and installing GCC"
cd "${OBJDIR}"
check_error $? "Change directory failed."
"${GCCDIR}/configure" "--target=${TARGET}" "--prefix=${PREFIX}" "--program-prefix=${TARGET}-" --with-gnu-as --with-gnu-ld --disable-nls --disable-threads --enable-languages=c,objc,c++,obj-c++ --disable-multilib --disable-libgcj --without-headers --disable-shared
check_error $? "Error configuring GCC."
PATH="${PATH}:${PREFIX}/bin" make all-gcc install-gcc
check_error $? "Error compiling/installing GCC."

echo
echo ">>> Cross-compiler for ${TARGET} installed."

Sorry für jeden Zeilenumbruch sollte fix sein leicht zu. Wenn Sie eine Pastebin oder http-Link wollen, es zu erhalten, lassen Sie einfach einen Kommentar.

Wenn Sie sind wirklich ganze Werkzeugkette für sich selbst bauen:
http://frank.harvard.edu/~coldwell/toolchain/
http: //ftp.snapgear. org / pub / SnapGear / tools / Arm-linux / build-Arm-linux-3.4.4
Nehmen Sie daran, obwohl, wie Sie für Toolchain compatibilty Matrix gesucht werden soll, oder Sie können in seltsame Kompilierungsfehlern laufen.

Wenn Sie immer noch die Möglichkeit, für crosstool-ng haben, ist es das, was ich gerade arbeite für letzte Tage:
http://blog.stranadurakov.com/2009/08 / 04 / how-to-Arm-linux /
Hier finden Sie meine cross-ng-Konfigurationsdatei finden, die für mich gearbeitet hatte.

Ich baute kürzlich ein GNU-Toolchain für ARM mit crosstool-ng. Es dauerte ein wenig von Versuch und Irrtum, um herauszufinden, welche Versionen der Toolchain Komponenten zusammen schön spielen würden, aber ich habe es endlich arbeitet mit den folgenden Versionen:

  • binutils 2.19.1
  • gcc 4.3.2
  • gmp 4.2.2
  • Linux-Kernel 2.6.29.1
  • mpfr 2.3.1
  • uClibc 0.9.30.1

Sehen Sie, wenn diese Arbeit für Sie.

Auch OpenWrt als ein Teil davon Prozess ist bauen schafft eine Cross-Kompilierung Werkzeugkette. Vielleicht möchten Sie, dass, um zu versuchen, als Ziel eine der ARM-basierte Boards Auswahl, auch wenn Sie bei der Herstellung einen WLAN-Router nicht interessiert sind.

Ich habe viel Glück gehabt mit buildroot Werkzeugketten und Bibliotheken für die Cross-Kompilierung Linux zu bauen. Buildroot nutzt die leichte uclibc C-Bibliothek statt glibc, so könnte es für Ihre Zwecke nicht funktionieren. (Und immer die Werkzeugkette auf diese Weise nicht ganz so spannend sein könnte, und kompilieren Sie es selber.)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top