Cross-Compilation für Raspberry Pi in GCC. Wo soll man anfangen?
TL/DR: Wo finde ich mehr Informationen über den Aufbau einer GCC-4.7.0 cross-compiling toolchain für ARM (gnueabi) - Plattform (läuft auf einem Raspberry Pi Gerät)?
Ich habe gerade got a brand new Raspberry Pi und ich bin sehr gespannt, um mit der Programmierung beginnen. Ich habe es geschafft, installieren Sie den GCC toolchain (ich bin mit dem Arch-Linux-system-image) und kompiliert einige basic-Programme, alle feinen arbeiten.
Ich habe auch versucht zu kompilieren, die Boost-Bibliotheken, da ich oft nutzen Sie in meine Projekte und alles schien zu funktionieren, indem Sie die folgenden Anweisungen (./bootstrap.sh
+ ./b2
) außer der Tatsache, dass die Zusammenstellung war quälend langsam. Ich ließ es für ein paar Stunden, aber es kaum gestern den ersten paar source Dateien. Nachdem ich es ausgeführt, für die Nacht, entdeckte ich, dass der build-Prozess abgebrochen aufgrund von RAM-Mangel.
So, meine Vermutung ist, dass der Rasp Pi ist einfach untermotorisiert für das kompilieren etwas von solcher Größe wie Boost. So, die cross-Kompilierung kommt mir in den Sinn. Aber, obwohl es eine Menge von Informationen über ARM cross-compilation erhältlich online finde ich es verwirrend. Wo kann man noch starten?
Habe ich eine aktuelle GCC-version (4.7.0) auf meinen Raspberry Pi, so würde ich am Liebsten das cross-kompilieren mit der gleichen version. Wo bekomme ich das GCC 4.7.0 toolchain für ARM? (Ich wird kompiliert auf x86 CentOS 6.2)
Edit:
Ich freigegeben, nicht benötigte GPU-Speicher eingerichtet und eine 4GB swap-partition auf einem USB-Laufwerk, während die build-Dateien auf einer NFS-Freigabe. Boost ist nun das kompilieren sehr viel schneller, also es ist überschaubar. Ich würde immer noch gerne wissen, wie kann ich einrichten einer GCC-4.7 toolchain zur cross-Kompilierung auf meinem x86 PC aber, da ich vorhabe eine Menge tun, um zu kompilieren, und ich möchte, dass es so schnell wie möglich.
Edit 2:
Da GCC 4.7.0 ist relativ neu, es scheint sich nicht um eine pre-built cross-compiler (i386->ARM). Ich werde wohl einen selber erstellen, das scheint eine nicht-triviale Aufgabe (ich habe versucht und sind gescheitert). Kennt jemand ein tutorial zu Folgen, für den Aufbau einer GCC-cross-compiler, der hoffentlich einer der letzten Versionen?
Habe ich versucht, mit das große shell-Skript (das funktioniert großartig für den Aufbau einer derselben-arch-compiler) und ich habe erfolgreich gebaut binutils
und GCC Voraussetzungen, aber dann GCC-build-gehalten nicht mit vielen kryptischen Fehler. Ich bin wirklich hier verloren, also ich würde schätzen Ihre Hilfe.
GCC auf Raspberry Pi so konfiguriert wurde, dass mit
--prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib
--mandir=/usr/share/man --infodir=/usr/share/info
--with-bugurl=https://bugs.archlinux.org/
--enable-languages=c,c++,fortran,lto,objc,obj-c++ --enable-shared
--enable-threads=posix --with-system-zlib --enable-__cxa_atexit
--disable-libunwind-exceptions --enable-clocale=gnu
--disable-libstdcxx-pch --enable-libstdcxx-time
--enable-gnu-unique-object --enable-linker-build-id --with-ppl
--enable-cloog-backend=isl --enable-lto --enable-gold
--enable-ld=default --enable-plugin --with-plugin-ld=ld.gold
--with-linker-hash-style=gnu --disable-multilib --disable-libssp
--disable-build-with-cxx --disable-build-poststage1-with-cxx
--enable-checking=release --host=arm-unknown-linux-gnueabi
--build=arm-unknown-linux-gnueabi
Edit 3:
Ich es geschafft, bauen ein 4,7-GCC toolchain für ARM (yay!) mit dieses shell-Skript wie vorgeschlagen von Benutzer dwelch in die Kommentare. Ich habe auch gebaut newlib
und libstdc++
mit dieser Artikel als Leitfaden. Die toolchain funktioniert gut, aber LS ich führen Sie die ausführbare Datei auf meinem Raspberry Pi, schlägt es mit Illegal instruction
. Was könnte die Ursache sein?
InformationsquelleAutor der Frage Tibor | 2012-06-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich diese Anleitung gefunden Wie man einen cross-compiler für Ihren Raspberry Pi. Es ist eine große Wanderung durch den Einsatz
crosstool-ng
Werkzeug, das vereinfacht die Projektierung einen cross-compiler bauen EINE MENGE (es hat eine schöne curses-basierte Schnittstelle) und unterstützt GCC 4.7.Scheint sehr gut zu funktionieren!
InformationsquelleAutor der Antwort Tibor
Hier ist eine Schritt-für-Schritt-Anleitung Wie erstellen Sie Raspberry Pi-cross-compiler in Windows. Der Grund, warum Sie immer
Illegal Instruction
Fehler neueste Raspbian ist hardfp-aktiviert und erfordert entsprechende patches für den gcc und eglibc zu unterstützen hardfp. Ansonsten generierten code verwenden verschiedene ABI, d.h. übergeben Sie der Funktion Argumente, die in verschiedene Register, so Abstürzen zur Laufzeit.Auch misconfiguring GCC für ARMv7 (Raspebby Pi ARMv6) führen kann
Illegal Instruction
Fehler. Geben Sie--with-arch=armv6
option bei der Konfiguration von GCC.Des oben verlinkten Handbuchs basiert auf GCC-4.6.3 obwohl. Aber ich denke, es sollte funktionieren mit GCC 4.7 zu.
InformationsquelleAutor der Antwort Mikhail Kupchik
http://github.com/dwelch67/raspberrypi buildgcc Verzeichnis es gibt ein Skript für beide 4.7 gcc/gnu und 3.0 clang/llvm. gnu-eine abgeleitet von dem Skript an die mpx-Projekt auf opencores habe ich ausgeschnitten gdb und libgcc, glibc, usw dauerte es bis zu einer compiler. wenn Sie möchten, dass andere Sachen Ausschneiden und einfügen-arm-mips-Architektur.
InformationsquelleAutor der Antwort old_timer
Konnte ich nicht finden, ein 4,7-gcc, nur der 4.6. Für Informationen, die ich zusammengestellt die Pi ' s kernel auf einem ziemlich alten Ubuntu-Rechner (1Ghz, 768MB RAM) nach der Anleitung auf dieser Seite:
Kernel-Kompilierung
Den Aufbau dauerte etwa 90 Minuten, im Vergleich zu den 6 Stunden ist es vorgeschlagen, dass es dauern würde, auf die Pi. Der kernel läuft Super auf dem Pi. Vielleicht können Sie sich diese Richtlinien für die cross-Kompilierung andere Projekte auf Ihrem x86-Linux-Rechner.
InformationsquelleAutor der Antwort NickT
Den dockcross Projekt ist ein guter Ausgangspunkt für eine völlig desodoriert tool-chain, die Sie bauen konnte, die nicht nur für Pi, sondern für etwas anderes. Hier sind die Befehle:
Es hat
cmake
eingebaut.InformationsquelleAutor der Antwort Zeev Glozman
Könnten Sie versuchen, die Himbeer-GCC-4.7.3 toolchain.
Es ist ein pre-built-gcc-4.7.3 toolchain für armv6 mit hardfp mit gnueabi. Ich verwende es, um cross-kompilieren von c++11 für eine raspberrian Ziel.
Bitte beachten, es funktioniert nur auf linux-x86_64 hosts.
InformationsquelleAutor der Antwort kallaballa
Als Sie festgestellt haben, aufbauend auf dem Raspberry Pi selbst ist langsam, aber zuverlässig (da ist es nicht cross-kompilieren), vorausgesetzt, Sie don ' T run out of memory. Vielleicht ist es möglich, optimieren Sie den Speicher und die swap-Einstellungen, um größere builds möglich (wenn nicht schnell). Ich weiß, in den Foren, die Leute reden über putting-root-Partitionen auf SD -, Benutzer-Partitionen auf USB-Laufwerken, und natürlich wird es wahrscheinlich einen Unterschied machen, um eine schnelle (class 6 oder höher) SD-Karte. Es ist möglich, im Laufe der Zeit, dass die Kompilierung wird die Leistung verbessern, wie die software verbessert. Oder, vielleicht Raspberry Pi 2 hat einen verbesserten Chipsatz und mehr RAM. 🙂
InformationsquelleAutor der Antwort mlepage