[ << ]
[ < ]
[ 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 ]
[ > ]
[ >> ]
I contenuti di questo documento sono rilasciati sotto la licenza Creative
Commons - Attribution / Share Alike.
|