[ << ]
[ < ]
[ Home ]
[ > ]
[ >> ]
1. Introduzione
Indice:
1.a. Preludio
Il cross development, sviluppare cioè su una piattaforma per eseguire ciò che è
stato generato su di un'altra, è solitamente considerata un'arte oscura, che
richiede molte ricerche, fatta di tentativi ed errori, alla cui base c'è la
perseveranza. Gli intrepidi sviluppatori devono affrontare la carenza di
documentazione e la mancanza di toolkit open source maturi e completi per lo
sviluppo multi piattaforma. Il lavoro portato avanti dal Progetto Gentoo Embedded, dal Gruppo Gentoo Toolchain e da altri
partecipanti ha prodotto e continua a migliorare un ambiente di sviluppo basato
su Gentoo che semplifica notevolmente il cross sviluppo.
1.b. La Toolchain
Il termine "toolchain" si riferisce all'insieme dei pacchetti usati per creare
un sistema (i "tool", ossia gli strumenti, che sono usati nella catena, "chain",
di eventi composta dal prendere dati input e generare dati in output ). E' una
definizione imprecisa se si guarda a quali pacchetti nello specifico sono
considerati parte della toolchain, ma al fine di semplificare il concetto, si
considerano tutti quei componenti necessari a compilare del codice in qualcosa
di divertente e utilizzabile.
La toolchain è composta dai seguenti elementi:
-
binutils - Strumenti essenziali per la manipolazione di binari
(include l'assembler ed il linker)
-
gcc - La Collezione di Compilatori GNU (il compilatore C e C++)
-
glibc o uclibc o newlib - La libreria C di sistema
-
linux-headers - Gli header del Kernel necessari alla libreria C di
sistema
-
gdb - Il debugger GNU
Tutti i sistemi Gentoo correttamente configurati hanno installata una toolchain
come parte del sistema base. Tale toolchain è configurata per generare binari
per la medesima piattaforma dove è installata.
Per generare binari su un sistema e far sì che essi possano essere eseguiti su
una diversa piattaforma, si avrà bisogno di una toolchain speciale - una
cosiddetta cross toolchain - specifica per la piattaforma di
destinazione. Gentoo mette a disposizione per questo scopo un semplice ma
potente strumento chiamato crossdev. Crossdev può generare e installare
sul sistema un numero arbitrario di cross toolchain, purché supportate dal GCC.
Dal momento che Gentoo installa tutti i file delle toolchain in directory
specifiche per ogni architettura, tali toolchain non interferiranno con quella
nativa di sistema.
1.c. Variabili d'Ambiente
Alcune variabili d'ambiente usate dalla toolchain di Gentoo e da Portage possono
confondere sviluppatori non esperti di cross development. La seguente tabella
spiega alcune di queste ingannevoli variabili e fornisce dei valori tipo, basati
sugli esempi di cross development presentati in questa guida. Vedere Ulteriori Terminologie e Variabili per altre
variabili insolite e relativi concetti.
| Variabile |
Significato quando si genera una Cross-Toolchain |
Significato quando si generano dei "Cross-Binari" |
| CBUILD |
Piattaforma su cui si sta compilando |
Piattaforma su cui si sta compilando |
| CHOST |
Piattaforma su cui la cross-toolchain sarà eseguita |
Piattaforma su cui saranno eseguiti i binari compilati dalla cross-toolchain
|
| CTARGET |
Piattaforma su cui sarano eseguiti i binari compilati dalla cross-toolchain
|
Piattaforma su cui sarano eseguiti i binari compilati dalla
cross-toolchain. Ridondante, ma non c'è pericolo se si imposta questa
variabile, e solo pochi binari si comportano allo stesso modo.
|
| ROOT |
Percorso alla root virtuale (/) dove si andrà a installare
|
| PORTAGE_CONFIGROOT |
Percorso alla root virtuale (/) dove portage potrà trovare i
suoi file di configurazione (come /etc/make.conf)
|
Se, ad esempio, si avesse un desktop AMD64 con Gentoo e si desiderasse
sviluppare qualcosa per il proprio PDA, architettura ARM, la tabella illustrata
sopra apparirebbe così:
| Variabile |
Valore per Generare la Cross-Toolchain |
Valore per Generare i "Cross-Binari" |
| CBUILD |
x86_64-pc-linux-gnu |
x86_64-pc-linux-gnu |
| CHOST |
x86_64-pc-linux-gnu |
arm-unknown-linux-gnu |
| CTARGET |
arm-unknown-linux-gnu |
non impostato |
| ROOT |
non impostare -- Come impostazione predefinita punta a /
|
/percorso/dove/verrà/installato |
| PORTAGE_CONFIGROOT |
non impostare -- Come impostazione predefinita punta a /
|
/percorso/ambiente/portage/per/arm/ |
1.d. Ulteriori Terminologie e Variabili
- canadian cross
-
Il processo di generare un cross-compilatore che funzionerà su una piattaforma
differente da quella dove è stato compilato (CBUILD != CHOST &&
CHOST != CTARGET)
- sysroot: system root
-
La directory dove il compilatore cercherà i proprio header standard e le
proprie librerie
- hardfloat
-
Il Sistema ha un'Unità a Virgola Mobile (Floating Point Unit (FPU)) per
gestire calcoli matematici a virgola mobile
- softfloat
-
Il Sistema non è dotato di una FPU hardware, perciò tutte le operazioni a
virgola mobile sono approssimate in virgola fissa
- PIE
- Position Independent Executable (-fPIE -pie)
- PIC
- Position Independent Code (-fPIC)
- CRT
- C RunTime
- Tuple
-
Per crossdev, è definito come una stringa nel formato
ARCH-VENDOR-OS-LIBC. Vedere crossdev -t help per informarsi
precise su come questa stringa può essere completata.
[ << ]
[ < ]
[ Home ]
[ > ]
[ >> ]
I contenuti di questo documento sono rilasciati sotto la licenza Creative
Commons - Attribution / Share Alike.
|