Domanda

Sono interessato alla compilazione incrociata di un kernel Linux per un target ARM su un host x86.Ci sono delle buone pratiche che consigli?Qual è la migliore suite di cross-compilazione secondo te?Hai creato un ambiente di compilazione incrociata personalizzato?Se sì, che consigli hai?È una buona idea?

È stato utile?

Soluzione

Esistono due approcci che ho usato per gli strumenti ARM / Linux. Il più semplice è scaricare direttamente una catena di strumenti precostruita.
Pro : funziona e puoi andare avanti con la parte interessante del tuo progetto
Con : sei bloccato con qualsiasi versione di gcc / binutils / libc che hanno scelto

Se la questione successiva è importante per te, consulta crosstool-ng . Questo progetto è uno strumento di configurazione simile all'applicazione di configurazione del kernel Linux. Imposta quali versioni di gcc, binutils, libc (GNU o uCLibc), threading e kernel Linux da compilare e crosstool-ng fa il resto (ovvero scarica le tar ball, configura gli strumenti e li costruisce). Pro : ottieni esattamente ciò che hai selezionato durante la configurazione
Con : ottieni esattamente ciò che hai selezionato durante la configurazione

significa che ti assumi la piena responsabilità per la scelta del compilatore / binutil / libc e delle loro caratteristiche / carenze / bug associati. Inoltre, come menzionato nei commenti, c'è qualche & Quot; dolore & Quot; coinvolto nella selezione delle versioni di binutils, libreria C ecc. poiché non tutte le combinazioni necessariamente lavorano insieme o addirittura costruiscono.

Un approccio ibrido potrebbe essere quello di iniziare con gli strumenti predefiniti e sostituirli in seguito con una soluzione personalizzata tramite crosstool-ng, se necessario.

Aggiorna : la risposta originariamente utilizzava gli strumenti CodeSourcery come un esempio di una catena di utensili pre-costruita. Gli strumenti CodeSourcery per ARM sono stati gratuiti per scaricare da Mentor Graphics , ma ora sono chiamati Sourcery CodeBench e devono essere acquistati da Mentor Graphics. Altre opzioni includono ora Linaro e strumenti specifici per la distribuzione di Android, Ubuntu e altri.

Altri suggerimenti

Uso la toolchain emdebian per compilare roba per le mie macchine ARM che non è contenta di essere compilata nativamente nelle piccole risorse disponibili (/ me sguardi sul kernel). Il pacchetto principale è gcc-4.X-arm-linux-gnueabi (X = 1,2,3) e fornisce comandi gcc / cpp / ld / etc opportunamente suffissi. Aggiungo questo al mio sources.list:

deb http://www.emdebian.org/debian/ unstable main

Naturalmente, se non stai usando Debian, questo probabilmente non è così utile, ma per gum funziona bene per me.

Ho usato scratchbox mentre sperimentavo la creazione di app per maemo (Nokia N810), che utilizza un ARM processore. Presumibilmente, scratchbox non è limitato allo sviluppo di maemo.

Ho utilizzato Crosstool su diversi obiettivi.È fantastico finché vuoi costruire la tua toolchain da zero.Naturalmente ci sono anche diverse toolchain predefinite per Arm, basta cercarle su Google: troppe per essere menzionate qui.

1) Secondo me costruire la propria toolchain funziona meglio.Alla fine avrai uno stretto controllo su tutto e, se sei nuovo nel mondo dei Linux embedded, sarà una GRANDE esperienza di apprendimento.

2) Non utilizzare una toolchain commerciale.Anche se non vuoi prenderti il ​​tempo per costruirne uno tuo, ci sono alternative gratuite là fuori.

Se la tua azienda spenderà i soldi, chiedi loro di comprarti un debugger jtag.
Ti farà risparmiare un sacco di tempo. e ti consente di imparare facilmente e di eseguire l'avvio del kernel, ecc.Consiglio vivamente di utilizzare il Lauterbach prodotti jtag...Funzionano con tantissimi obiettivi e il software è multipiattaforma.Anche il loro supporto è eccezionale.

Se non riesci a ottenere un debugger jtag e stai lavorando nel kernel, usa una VM per farlo, usermode linux, vmware..etc..il tuo codice verrà sottoposto a debug su x86..portarlo sul bersaglio del braccio sarà una storia diversa, ma è un modo più economico per appianare alcuni bug.

Se stai effettuando il porting di un bootloader, usa uboot.Naturalmente, se stai utilizzando una piattaforma di riferimento, probabilmente starai meglio utilizzando ciò che forniscono con il BSP.

Spero che aiuti.

Buildroot è uno strumento con cui ho avuto ragionevolmente fortuna con la creazione di una toolchain personalizzata basata su uClibc da graffiare. È molto personalizzabile e non eccessivamente particolare su quale distribuzione ti capita di eseguire.

Inoltre, molti dei suoi utenti esistenti (es. distribuzioni di router incorporati) prendono di mira anche ARM.

Se stai usando Gentoo, ottenere una toolchain di compilazione incrociata è facile come

$ emerge crossdev
$ crossdev -t $ARCH-$VENDOR-$OS-$LIBC

dove ARCH è arm o armeb, VENDOR è unknown o softfloat, OS è linux e LIBC è gnu o uclibc.

Se tutto ciò che vuoi è un compilatore (e linker) per il kernel, la parte -s1 è irrilevante e puoi usare --stage1 / crossdev per informare binutils che hai solo bisogno di gcc e <=>.

Questo è ciò che Eurotech utilizza per il loro ARM Debian distibution. Noterai che non raccomandano l'uso di un compilatore incrociato se puoi evitarlo. La compilazione sull'obiettivo stesso tende ad essere un modo più affidabile per ottenere output che sai verranno eseguiti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top