Gentoo Logo

[ << ] [ < ] [ Home ] [ > ] [ >> ]


3. Cross-Compilare con Portage

Indice:

3.a. Variabili

Ci sono alcune importanti variabili che verranno usate in questa sezione.

Variabile Significato
CBUILD Piattaforma su cui si sta compilando
CHOST Piattaforma per cui si sta compilando
ROOT La / virtuale sulla quale si sta installando
PORTAGE_CONFIGROOT La / dove portage può trovare i suoi file di configurazione (come make.conf)

È possibile valorizzarle tutte a mano, ma questo ovviamente diventa presto una scocciatura. Un'idea migliore è invece quella di specificare queste variabili in uno script di shell così da evitare di digitarle ogni volta.

3.b. Configurazione del Filesystem

Il cross-compilare un sistema richiede generalmente due alberature di directory. La prima, dove tutti i file di sviluppo sono normalmente installati. Questa è la vostra sysroot. L'altra alberatura è invece dove verranno installati i file che devono essere eseguiti. Una volta installati con emerge tutti i pacchetti nella sysroot (senza aver rimosso alcun file) sarà sufficiente installare tramite pacchetti binari o copiando a mano tutti i file desiderati nell'alberatura di esecuzione.

È convenzione usare l'alberatura presente sotto /usr/CTARGET/ come sysroot, dato che il cross-compilatore è già configurato per cercare in tale percorso le directory degli include e delle librerie. È anche possibile usare un'altra directory, aggiungendone poi il percorso alle CPPFLAGS/LDFLAGS tramite l'opzione -I/-L, ma questo opzione storicamente si è rivelato esser problematica: anche se dovesse funzionare, è sconsigliata e scoraggiata. D'ora in avanti si assumerà che si stia usando la sysroot come propria ROOT di sviluppo.

Il sistema che poi si vorrà eseguire avrà probabilmente bisogno di un po' di lavoro per esser alleggerito e snellito. Proprio per via dei file che si rimuoveranno dai pacchetti installati, questo ambiente non è adatto per la compilazione. Mentre si installa la sysroot si possono generare pacchetti binari dei vari applicativi, dai quali, con l'aggiunta della variabile INSTALL_MASK sono facilmente rimuovibili i file giudicati superflui. Leggere man make.conf per ottenere maggiori informazioni.

3.c. Introduzione: wrapper di crossdev

Ci sono dei semplici script wrapper che imposteranno al posto dell'utente le variabili d'ambiente in modo da farle puntare alle giuste posizione per permettere la cross compilazione usando emerge. PORTAGE_CONFIGROOT e ROOT punteranno entrambe a SYSROOT.

Codice 3.1: wrapper di crossdev

# emerge crossdev

Nota: Prima di iniziare un qualsiasi cross-emerge, bisogna eseguire emerge-wrapper --init. Assicurarsi di seguire ogni istruzione stampata a video da emerge-wrapper, prima di cominciare con il proprio cross-emerge.

È possibile usare questi strumenti sia per installare nella propria root di sviluppo (sysroot) sia in quella per l'esecuzione. Per quest'ultima, specificarla usando semplicemente l'opzione --root. Per esempio, se si ha effettuato l'emerge di una toolchain armv4tl-softfloat-linux-gnueabi tramite crossdev successivamente si dovrebbe invocare il comando come un normale emerge, usando però il prefisso ctarget:

Codice 3.2: CTARGET-emerge

# armv4tl-softfloat-linux-gnueabi-emerge pkg0 pkg1 pkg2

Come impostazione predefinita questi wrapper usano l'opzione --root-deps=rdeps per evitare che le dipendenze dell'host vengano incluse nell'albero delle dipendenze. Ciò potrebbe portare ad alberi di dipendenze incompleti. Perciò si potrebbe voler usare --root-deps singolarmente per vedere il grafico completo delle dipendenze.

Come impostazione predefinita i wrapper si collegheranno al profilo embedded generico. Questo viene fatto per semplificare le cose, ma l'utente potrebbe desiderare un profilo di destinazione più avanzato. Per poterlo fare è possibile aggiornare il collegamento simbolico al profilo.

Codice 3.3: ${SYSROOT}/etc/make.profile

# ln -s /usr/portage/profiles/default/linux/arm/10.0
${SYSROOT}/etc/make.profile

E naturalmente per cambiare le impostazioni del sistema di destinazione, tipo flag USE, FEATURES e VIDEO_CARDS, si modificheranno i file di configurazione standard di portage.

Codice 3.4: ${SYSROOT}/etc/make.conf

# $EDITOR ${SYSROOT}/etc/make.conf

Qualche volta ci sono alcun test addizionali per gli script di configurazione che bisogna necessariamente aggirare. Per far ciò i wrapper esportano alcune variabili per forzare i test a ricevere la risposta desiderata. Ciò aiuterà a prevenire sprechi di risorse nei pacchetti che aggiungono funzioni locali per aggirare eventuali problemi nel proprio sistema che impedirebbero l'esecuzione del test. Di volta in volta potrebbe essere necessario aggiungere variabili aggiuntive a questi file in /usr/share/crossdev/include/site/ in modo da permettere la compilazione di un pacchetto. Per capire quale variabile bisogna aggiungere, spesso basta eseguire un grep sullo script di configurazione per individuare la variabile autoconf e aggiungerla all'appropriato file di destinazione. Ciò diviene ovvio dopo le prime volte che si esegue tale operazione.

3.d. Disintallazione

Se si desidera disinstallare ed eliminare quanto fatto, sarà sufficiente rimuovere l'alberatura presente nella sysroot, senza intaccare alcun pacchetto nativo installato. Si legga anche la sezione relativa alla disinstallazione nella guida relativa alla cross-compilazione.


[ << ] [ < ] [ Home ] [ > ] [ >> ]


Stampa

Visualizza tutto

Aggiornato il 31 dicembre 2010

Oggetto: Usare Portage come Cross-Compilatore e Gestore di pacchetti.

Mike Frysinger
Autore

Ned Ludd
Autore

Robin H. Johnson
Autore

Alex Tarkovsky
Autore

Alexey Shvetsov
Autore

Raúl Porcel
Autore

Joshua Saddler
Redazione

Andrea Perotti
Traduzione

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.