Come faccio a creare una toolchain GCC 4.7 per la compilazione incrociata?


82

Ho già posto questa domanda su Stack Overflow, ma vorrei sapere se qualcuno è riuscito a costruire una toolchain GCC 4.7 per la compilazione incrociata ARM (per un host Linux x86 / x86-64). Ci sono molte istruzioni per costruire GCC dal sorgente e molti cross-compilatori disponibili per le versioni GCC precedenti alla 4.7, ma non l'ultima.

Compilare lo stesso Rasp Pi funziona bene, ma è solo un po 'troppo lento per scopi pratici.

Sono ansioso di compilare e vorrei usare gli strumenti più recenti e migliori.


Questo sembra sulla falsariga anche quello che devo fare. Stiamo sviluppando per un ARM5 che esegue Arch Linux. Lo sviluppo è su Ubuntu Linux 10.04 LTS (oggi, forse lo aggiorneremo domani, non lo so ancora). Attualmente stiamo eseguendo GCC 4.4, ma le cose che devo fare saranno utili se non richiedono GCC 4.7 (minimo) se non GCC 4.8 (se possiamo gestirlo), per le funzionalità del linguaggio C ++ 11. Sembra che tutte le catene di strumenti disponibili per ARM (5 o qualsiasi altra cosa) siano superate in modo impotente. È possibile costruire una catena di strumenti per il compilatore incrociato dalla fonte e supportare il GCC che vogliamo?
mwpowellhtx,

Ho un piccolo problema nel secondo passaggio. in effetti, ho eseguito il comando ./configure ed eseguito comandi. Tutto funziona bene. ma quando ho scritto "installa", ho ricevuto un messaggio di errore che diceva: install:

Vedi anche: raspberrypi.stackexchange.com/q/14587/5538 L' ho chiuso come un duplicato, ma ho pensato che valesse la pena collegarlo qui perché la risposta accettata va in molti dettagli non inclusi qui.
Riccioli d'oro

Risposte:


60

Ho trovato queste istruzioni Come creare un compilatore incrociato per il tuo Raspberry Pi . È una grande passeggiata attraverso l'uso di uno crosstool-ngstrumento che semplifica la configurazione di una build cross-compilation MOLTO (ha una bella interfaccia basata su curses) e supporta GCC 4.7.

Ho seguito questi passaggi e ho finito con una build di successo di un cross-compilatore 4.7.

Prerequisiti: sono richiesti i seguenti pacchetti: bisonte , flessibile , gperf , gawk , libtool , automake , g ++ , assicurarsi che siano installati prima di procedere.

  1. Primo download crosstool-ngda qui (ho usato la versione 1.15.2).
  2. Disimballare la distribuzione ed eseguire un ./configure/ make/install
  3. Crea una nuova directory da qualche parte nel file system da cdinserire e in essa.
  4. Corri ct-ng menuconfig. Ti verrà presentato un bel set di menu per configurare la tua build.
  5. Vai su Percorsi e opzioni varie. Abilita funzioni di prova contrassegnate come SPERIMENTALE.
  6. Scegli una directory prefisso adatta . Questa è la directory in cui verranno installati il ​​compilatore e le librerie (tutto va bene in fondo, assicurati solo che la directory sia vuota).

    • NOTA: è anche importante avere accesso in scrittura alla cartella scelta
  7. Vai al menu Opzioni target .

    • Architettura di destinazione: braccio
    • Endianness: little endian
    • Testimone: 32 bit
  8. Potresti anche voler impostare il parametro in virgola mobile su softfp (vedi questo per maggiori informazioni), ma hardfp è più appropriato per Raspbian.

  9. Vai al menu del sistema operativo e cambia il sistema operativo target in linux .
  10. Vai al menu del compilatore C e scegli gcc versione 4.7.0 (l'articolo raccomanda Linaro, ma sono riuscito a farlo funzionare con vanilla gcc). Scegli anche altre lingue che desideri compilare (C ++, Fortran, ...)
  11. Vai al menu C-library e scegline uno. L'impostazione predefinita è eglibc ma quella non ha funzionato bene per me, quindi ho usato glibc (la versione più recente).

    • NOTA: durante il passaggio di generazione 13. eglibc non può essere compilato se non è installata la sovversione, poiché non è possibile recuperare l'origine dal repository
    • NOTA: eglibc non fa più parte della versione 1.21.0 a causa della sua mancanza di sviluppo. Vedi così tanto tempo per eglibc . Usa glibc come predefinito. crosstool-ng
  12. Esci dallo strumento di configurazione mentre salvi le modifiche.
  13. Esegui ct-ng buildnella stessa directory. Aspetta un po '(nel mio caso circa 45 minuti) e il tuo compilatore incrociato dovrebbe essere pronto.

Sembra funzionare alla grande!


Caspita, 45 minuti sono tanti. Quanto è veloce il tuo sistema? Sto aspettando ora
Jivings,

Beh, forse è stato un po 'meno, ma deve compilare tutti i prerequisiti prima e dopo bintools e gcc anche libc e libstdc ++, quindi 45 minuti mi sembrano ragionevoli.

Potremmo aggiungere dettagli su come installarli correttamente e aggiornare il percorso, una volta testati ovviamente?
Alex Chamberlain,

2
Inoltre, penso che dovremmo usare hardfp, poiché l'RPi lo supporta.
Alex Chamberlain,

Può essere, ma IIRC, il GCC di Arch è configurato con softfp. Non ho tempo di provarlo ora, ma ho creato la wiki della community di risposta, quindi sentiti libero di migliorarlo.

19

Sono ansioso di compilare e vorrei usare gli strumenti più recenti e migliori.

In effetti, gli strumenti più recenti e migliori non devono essere creati da soli. Sul repository GitHub di Raspberry Pi Tool troverai i toolchain X86_64e x686per il software di compilazione incrociata.

Consiglio di utilizzare la x86-linux64-cross-arm-linux-hardfptoolchain, poiché verrà compilata per Hard Floating Point, il che si tradurrà in un sistema molto più veloce.

$ arm-bcm2708hardfp-linux-gnueabi-gcc --version

arm-bcm2708-linux-gnueabi-gcc-4.5.1 (Broadcom-2708) 4.5.1
Copyright (C) 2010 Free Software Foundation, Inc.

Nota: se si utilizza un kernel esistente, sarà necessario utilizzare la toolchain corrispondente al kernel. Le applicazioni HardFP non funzioneranno su un kernel SoftFP.


Per utilizzare la toolchain è sufficiente controllare il repository:

git clone https://github.com/raspberrypi/tools.git --depth 1

Il --depthparametro significherà che non è necessario attendere che venga scaricata anche la cronologia del repository (poiché non la useremo).

Quindi aggiungi i binari alla tua variabile PATH:

export PATH=~/tools/arm-bcm2708/x86-linux64-cross-arm-linux-hardfp/bin:$PATH

O per persistere nel PERCORSO:

echo "export PATH=~/tools/arm-bcm2708/x86-linux64-cross-arm-linux-hardfp/bin:$PATH" >> ~/.bashrc
source ~/.bashrc

Per compilare con la catena degli strumenti è ora possibile aggiungere il CROSS_COMPILEparametro. Ad esempio, durante l'esecuzione make:

make CROSS_COMPILE=arm-bcm2708hardfp-linux-gnueabi- 

O per semplificare questo, puoi salvare di bashrcnuovo la variabile :

echo "export TARGET=arm-bcm2708hardfp-linux-gnueabi" >> ~/.bashrc
source ~/.bashrc

e ora usa la variabile durante la compilazione:

make CROSS_COMPILE=${TARGET}

1
Questo sembra essere gcc-4.5.1.

@Tibor È così male?
Jivings,

@Jivings Non risponde totalmente alla domanda!
Alex Chamberlain,

1
Non approvo i voti negativi. @AlexChamberlain Suggerisce un prezioso metodo alternativo all'atto dispendioso in termini di tempo di costruzione della propria toolchain.
Jivings,

2
@Jivings: questo è molto utile. Nel frattempo è gcc4.7.1 (il migliore che abbia mai avuto) e la virgola mobile funziona subito. Non riuscivo a far funzionare la virgola mobile usando la descrizione originale di Chris pubblicata da Tibor. Grazie mille.

4

Si noti che durante la creazione della toolchain utilizzando ct-ng su centos 6.3 su un sistema a 64 bit sono stato costretto a deselezionare l'opzione per collegare staticamente libstdc ++ perché il collegamento statico non era supportato sulla piattaforma (apparentemente).

Inoltre, mentre sarebbe bello usare la toolchain precompilata dal repository git, quella catena non sembra funzionare su Centos 6.3 - probabilmente perché è costruita per un sistema più moderno o qualcosa del genere. Non ho davvero provato a ridurlo.



3

Se vuoi beneficiare di un host veloce per la compilazione di elementi per il tuo RPI, ti suggerisco di lavorare in ambiente incrociato tramite chroot e QEMU. Questo a proposito sostituisce un compilatore incrociato senza problemi.

Basta configurare un ambiente Debian attraverso deboostrap / multistrap

(vedi capitolo QEMU / approccio debootstrap) e il gioco è fatto.


3

Nel caso in cui eseguirai la compilazione incrociata da OS X: ecco il grande articolo (e l'unico che lavora sul web che ho trovato).

La cosa più importante è che l'autore fornisce una toolchain completa precompilata , quindi devi solo scaricare, decomprimere e montare l'immagine dmg. E questo è tutto, sei pronto per la compilazione incrociata.


2

Se hai installato Ubuntu 64 bit edition e gli strumenti di Raspberry Pi SVN e ricevi l'errore:

-bash: /home/I/toolchain/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-c++: 
No such file or directory

corri:

sudo apt-get install ia32-libs

1

Carlson-Minot Inc. fornisce una toolchain precostruita per target ARM sia in metallo nudo che GNU / Linux. Questa toolchain si basa sulla toolchain Mentor Graphics Sourcery Lite con correzioni e adozioni per build su OS X. Vedi

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.