Home Tecnica Virtualizzazione Perché cross compilare quando si può compilare nativamente?

In evidenza

SMAU a Bologna con Research to Business

SMAU a Bologna con Research to Business

Il 6 e 7 giugno il Roadshow Smau Business torna a far tappa al Padiglione 33 della Fiera di Bologna e...
Gli articolisti del Portale

Gli articolisti del Portale

Abbiamo deciso di dare più visibilità a tutti coloro che hanno pubblicato articoli per noi, questo perché...
SMAU festeggia il suo quinto anno nel NordEst a Padova

SMAU festeggia il suo quinto anno nel NordEst a Padova

Il 18 e 19 aprile al padiglione 5 di Padova Fiere si terrà la prossima tappa di SMAU Business Roadshow. All'evento...
SMAU risale l’Italia e arriva a Roma

SMAU risale l’Italia e arriva a Roma

Il 21 e 22 marzo nella Nuova Fiera di Roma si terrà la prossima tappa di SMAU Business Roadshow. L'evento...

Bandi di Concorso

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

Avviso per incarico ad ingegnere informatico alla Provincia di Bergamo

Nell'ambito del progetto denominato "SOS badanti: la rete provinciale di sportelli per assistenti e collaboratori familiari” nell'ambito del programma "SAP - Servizi alla Persona" è stato pubblicato la Provincia di Bergamo ha pubblicato l'avviso per il reclutamento di una unità per incarico di...

21 Mag 2012 - Letture:1

Esperto di servizi e tecnologie cloud al Digit PA

Procedura comparativa per il conferimento di un incarico di collaborazione coordinata e continuativa per un profilo senior di “Esperto di servizi e tecnologie cloud”, nell’ambito del progetto europeo “Open Dai” presso l' Ente nazionale per la digitalizzazione della Pubblica Amministrazione...

18 Apr 2012 - Letture:34

Selezione per addetto servizi informatici all'Autorità Portuale di Brindisi

Avviso di selezione pubblica per titoli e prova orale per l’assunzione di n. 1 “addetto ai servizi informatici”, a tempo pieno ed determinato triennale, previo periodo di prova, da inquadrare nell’Area Amministrativa. (Inquadramento al III Livello del C.C.N.L. dei Lavoratori...

12 Feb 2012 - Letture:435

Concorso pubblico per informatico alla Corte dei Conti

E' indetto un concorso pubblico, per   esami,   per   il reclutamento di tre unità di informatici da inquadrare nella III area, fascia retributiva F1, da destinare agli Uffici della Corte dei Conti con sede in Roma. Requisiti: laurea triennale in scienze e...

05 Feb 2012 - Letture:306

Istruttore informatico L.68/1999 al Comune di Potenza

Concorso pubblico, per esami, per la copertura di n. 2 posti di Istruttore Informatico, categoria C, posizione economica C1, a tempo pieno e indeterminato, con riserva assoluta alle categorie dilavoratori di cui all'art. 1 della legge n. 68/1999 (norme per...

21 Gen 2012 - Letture:244

Senior Business Consultant presso Lombardia Informatica

Selezione per figura Senior Business Consultant presso Lombardia Informatica. Il collaboratore dovrà fornire consulenza strategica e di business sulle tematiche verticali della Socio-Sanità. Requisiti di ammissione: Laurea in Ingegneria, Economia e Commercio o Scienze dell’Informazione; Percorsi di formazione professionale in ambito sanitario e socio-sanitario, su...

11 Gen 2012 - Letture:284

Bando progetto TAG (Toscana Area Giovani) per giovani talenti digitali

UPI Toscana ha indetto un avviso pubblico per la selezione di 20 giovani (2 per ciascuna delle 10 province della Toscana), da impiegare come formatori all'interno del Progetto TAG (Toscana Area Giovani). Il bando è finalizzato a valorizzare al meglio i...

03 Gen 2012 - Letture:271

I più attivi

Dati e punteggi dell'ultimo anno

Giovanna Casamassima Giovanna Casamassima
47 articoli
16,501 punti totali
Rodolfo Giometti Rodolfo Giometti
49 articoli
5,153 punti totali
Vittorio D'Aversa Vittorio D'Aversa
33 articoli
3,445 punti totali
Fulvio Lucchetti Fulvio Lucchetti
9 articoli
0,279 punti totali
Luigi Carbone Luigi Carbone
10 articoli
0,262 punti totali

Ci hanno visitato

Oggi:1377
Ieri:2110
Totali (14/04/09):1170552

I nostri numeri

Articoli pubblicati: 552
Iscritti al portale: 768
Iscritti all'Elenco: 184
Iscritti ML Discussioni: 351
Iscritti ML Articoli: 30
Iscritti ML Lavoro: 166
 

Backup mail server: quando il mail server non è raggiungibile

Se avete il mail server in proprio potrebbe succedere che questo non sia raggiun...

Clonare una macchina vera in 30 minuti con VirtualBox

Essendo uno sviluppatore mi son reso conto che la virtualizzazione di una macchi...

Installazioni di Linux su sistemi non convenzionali

Un'ottica convenzionale vede l'informatica come un insieme di applicazioni e sis...

Arduracing: come realizzare una robot-car intelligente con Arduino

Arduracing è un progetto realizzato con Arduino in collaborazione con il Lucccal...

Mageia 1 alpha1 è tra noi

Finalmente è stata rilasciata la tanto attesa versione alpha1 principalmente riv...

Generare un file da 10GB in 2 millisecondi!

Chi ha a che fare con le macchine virtuali o deve generare delle immagini di fil...

PyGTK su N900

Come programmatore avere un cellulare che in pratica è un computer (oramai il 10...

Perché cross compilare quando si può compilare nativamente?

Lavorando con architetture diverse mi trovo spesso a dover utilzzare uno stesso ...

Come ti controllo i tassi di interesse con Linux

In questi giorni sto cercando di fare una surruga per il mutuo di casa mia. Tra ...

ettercap: il man-in-the-middle facile

Troppo spesso mi rendo conto che molti considerano la rete aziendale o quella ...

Controllare MAME con Wiimote su N900!

Ecco un'altra dimostrazione delle potenzialità di questo telefono (se vogliamo c...

Multi puntatore su Ubuntu 10.4: ecco come

Tempo fa ebbi modo di dare un'occhiata al progetto MPX per un cliente. La cosa n...

LIM: la lavagna multimediale con il wiimote

LIM sta per Lavagna Interattiva Multimediale, ed è un progetto che, tramite l'...

Universal USB Installer 1.8.04 e Ubuntu Linux 10.10

Rilasciata il 10.10(.2010) la nuova versione di Ubuntu Linux (la data corrispond...

Cluster VMWARE

In questo articolo vediamo come realizzare un cluster di macchine virtuali con u...

Cloud Computing: cos'è veramente?

Da qualche tempo si sente sempre più parlare di Cloud Computing. Sembra che ques...

TurnKey Linux: accendi e vai!

Quanto tempo occorre per installare e configurare una macchina LAMP (Linux, Apac...

Demolinux: l'automazione industriale con Linux

Qualche tempo fa il mio ex istituto superiore mi aveva chiesto di fare una picco...

Forno a microonde: analisi emissioni EME

Nell'immaginario collettivo c'è una forte paura per i danni che posso generare s...

Architettura di una trading room

La trading room o sala mercati è il luogo dove vengono effettuate le operazioni ...

Intervista esclusiva a Mageia Linux

La Presidente dell'Associazione MAGEIA.ORG, Anne Nicolas, in questa intervi...

Code Smells

Sempre più spesso il codice ha un cattivo odore. Sei sicuro di non scrivere cod...

Come creare un NFS server ridondante

Quelli che mi conoscono sanno che il mio ambito lavorativo è nei sistemi embedde...

Aggiungere programmi all'N900 con Maemo SDK

Abbiamo già visto come sia facile installare nuove applicazioni sul Nokia N900, ...

Snom 870: il telefono con Linux

Definirlo solo telefono è sicuramente riduttivo, infatti lo Snom 870 è sicuramen...

Cloud Money

Discorrendo con un collega di cloud computing, si è finito, come al solito, a pa...

F-Droid, e il FOSS su Android è servito!

Come Software Libre Evangelist mi son spesso trovato ad incoraggiare l'uso del s...

Generare un file pieno di 0xff

Per generare in file da 16Kbyte pieno di zeri su di un sistema UNIX/GNU-Linux si...

Verificare spazio su disco su UNIX

Nella gestione si sistemi informativi capita spesso di accedere a postazioni ser...

Socat: quando i dati passano via rete

Lavorando coi sistemi embedded molte volte mi capita di dovermi arrangiare su di...

Odroid: la piattaforma di gioco libera

Si chiama Odroid ed e basata su Android, è la prima piattaforma di gioco interam...

Virtualizzazione di Windows XP o altri SO su Ubuntu con Qemu

I pc odierni sono sempre più potenti e molto spesso sotto sfruttati, la virtua...

GNU readline: un tool indispensabile per la linea di comando

Chiunque di voi abbia avuto a che fare con la linea di comando avrà senz'altro a...

Lion desktop: finalmente una distribuzione mirata alle aziende!

Chi è abituato a lavorare con Linux, ed in particolare ha provato a lavorare con...

AVG Live CD Rescue: l'antivirus live!

Qualche giorno fa mi sono reso conto che in azienda sta per scadere la licenza d...

Maemo extras: ancora più applicazioni per l'N900

Finalmente, grazie a Nokia, abbiamo a disposizione un esemplare dell'N900 su c...

Rete lenta? Vediamo chi consuma...

Molte volte capita di trovarsi la rete molto lenta e magari non abbiamo a dispos...

WODE, l'emulatore DVD per la Wii

Qualche giorno fa mi è capitato di sfidare mio cognato ad una partitella a tenni...

Sabayon Linux 5.4 (32 e 64 bit)

E' stata rilasciata online la nuova versione 5.4 di Sabayon Linux, una tra ...

Integrazione Webmaster Tool. Google Analytics, le ultime novità

Google non finisce mai di stupirci, ma soprattutto è inarrestabile sull'implemen...

XMount finalmente liberi di virtualizzare!

Cosa succede dopo che abbiamo acquisito un disco in bitstream su file immagine? ...

Sicurezza informatica: safety, dependability, security

La sempre maggiore diffusione delle tecnologie ha profondamente rivoluzionato la...

Openembedded: la distribuzione «ristretta» per Linux

Quando le risorse di un sistema sono limitate non è possibile usare una distribu...

Linutop OS 4.0: Internet, Chiosco Multimediale e non solo!

Presentata negli ultimi giorni nella capitale francese la nuova distribuzione LI...

I dati e le loro anomalie nascoste

La motivazione per questo articolo nasce dalla crescente problematica di gestion...

Nvidia 295.33, ecco i nuovi driver per linux versione 3.3

L'annuncio è di qualche giorno fa, Nvidia rilascia i nuovi driver 295.33 con sup...

Sviluppare codice per Arduino dalla command line

Arduino Uno è un micro controllore basato su CPU ATmega328; si alimenta via alim...

Boxee Box: la TV facile di D-Link

Grazie alla D-Link possiamo presentare un nuovo gioiello della tecnologia: il me...

Multistrap: come ti creo un rootfs Debian dal nulla

Una volta c'era debootstrap, un tool fantastico che permetteva di creare un root...

Grep e Strings due giganti di Linux

Il tempo libero serve anche a sperimentare e quando si ha la passione per la com...

Git in Eclipse

Chi mi conosce sa la mia avversione (del tutto personale, ci tengo a sottolinear...

Autenticarsi con la pen drive

La pen drive è ormai diventata come il cellulare, impossibile non averla, ma sie...

I-Memo: le password personali sempre con te

Prodotto dalla MensTecnica, una giovane azienda della Basilicata fondata nel 200...

Come gestire una presentazione con il Wiimote

Capitandomi spesso si tenere conferenze e workshop mi trovo sempre il problema d...

Android: se non hai il telefono usa l'emulatore!

In questi giorni sto valutando di comprare un cellulare basato su Linux. Inizial...

Android-x86: quando il drone sbarca sui PC

Chi pensa che Andoird abbia vita bere farà bene a ricredersi perché, oltre alle ...

Geexbox: la mini distro MediaCenter Linux

Geexbox è un piccolo ma potente sistema operativo orientato alla riproduzione di...

Linaro, la no-profit che produce distribuzioni Linux/ARM

Il progetto Linaro presentato nel 2010 da colossi del calibro di Freescale Semic...

Kameleon: oltre i limiti della virtualizzazione

Negli ultimi anni la potenza dei computer e la loro capacità è aumentata in modo...

SL4A e il drone parla più lingue

Chi come me non ama Java si sentirà a disagio volendo programmare una qualsiasi ...

Perché cross compilare quando si può compilare nativamente? Stampa E-mail
(2 voti, media 5.00 di 5)
Area Tecnica - Virtualizzazione
Scritto da Rodolfo Giometti   
Lunedì 23 Maggio 2011 12:07
Articolo letto 878 volte

Lavorando con architetture diverse mi trovo spesso a dover utilzzare uno stesso pacchetto software su più piattaforme, nulla di speciale se si usano distribuzioni che lo supportano, ma la cosa diventa complicata se la distribuzione che abbiano non lo fa!

Molto spesso i sistemi embedded che si trovano in commercio vengono venduti con distribuzioni ad hoc (cioè ritagliate per l'hardware) le quali però non sempre supportano tutto il software che ci serve. In questo caso, quello che si può fare, è provare a cross compilare il software che ci serve per la nostra architettura; cosa però irta di difficoltà!

Questo perché le toolchain che ci vengono fornite sono spesso incomplete e, se anche non lo fossero, molto spesso succede che il pacchetto software che ci serve non è pensato per essere cross compilato. Tutti questi fattori rendono, alle volte, quasi impossibile la cross compilazione.

Ecco perché suggerisco ai miei clienti di abbandonare questa strada e di compilare nativamente; vediamo come e quali problematiche comporta.

Uno dei primi problemi della compilazione nativa è data dal fatto che l'hardware di cui disponiamo non sempre è in grado di supportare questo tipo di operazione; questo per due ragioni principali:

  1. La memoria di massa del sistema è troppo piccola per contenere una distrubuzione completa (seppur installata in modalità minimale).
  2. La memoria del sistema è troppo poca per eseguire gli strumenti di compilazione.

Di solito per poter compilare in maniera agevole un pacchetto software dobbiamo usare una distribuzione abbastanza completa (io uso sempre Debian poichè non solo è la più completa ma è anche quella che supporta il maggior numero di architetture e pacchetti software), il che implica però la necessità di una discreta quantità di memoria di massa per contenerla (per una Debian basilare ci vogliono almeno 512MB di disco).

Questo problema, comunque, si supera abbastanza facilmente se abbiamo a disposizione una scheda di rete (praticamente tutti i sistemi moderni ce l'hanno) ed utilizzando un rootfs di tipo NFS. In questo modo il disco del sistema è su di un server esterno il quale può darci tutta la memoria di massa di cui abbiamo bisogno. Risolvere il secondo problema è invece un po' più complicato, infatti, o il nostro sistema ha abbastanza memoria (di solito 512MB di RAM) oppure non è che ci sia molto da fare...

In realtà però esiste anche una terza via che risolve entrambi in nostri due problemi in un colpo solo: usare un emulatore.

Con un emulatore possiamo utilizzare come memoria di massa il disco del sistema host e, per quanto riguarda la RAM, anch'essa ci viene fornita dall'host; insomma sembra proprio la soluzione ideale... è in un certo senso lo è davvero! Vediamo allora un esempio pratico.

Installare una Debian PPC

In questi giorni dovevo cross compilare questo programma per una piattaforma PowerPC. La compilazione nativa è abbastanza semplice, basta dare il solito comando ./configure && make; sulla mia Ubuntu ottengo infatti:

$ ./configure && make
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking for gcc... gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
...

e la compilazione va a buon fine (anche se ho dovuto installare un po' di pacchetti che mancavano).

La cross compilazione invece, pur disponendo una una buona toolchain, non sono riuscito a farla terminare con successo! Ci sono diverse problematiche legate al fatto che il pacchetto ha bisogno di diverse dipendenze, tra cui Python. La soluzione allora è compilare nativamente.

Per fare questo però ci vorrebbe una Debian PPC (o PowerPC) e, sopratutto, una macchina per farla funzionare... io però la macchina PowerPC non ce l'ho e quindi uso QEMU per emularla. Installare QEMU su Ubuntu è abbastanza semplice, basta installare i seguenti pacchetti con il comando:

$ sudo aptitude install qemu qemu-system qemu-kvm-extras kvm-pxe

Da notare che mi sono anche dovuto installare un pacchetto Debian che Ubunti non supporta ma che è necessario a QEMU per emulare una macchina PowerPC:

$ wget http://ftp.us.debian.org/debian/pool/main/o/openbios-ppc/openbios-ppc_1.0+svn1018-1_all.deb
$ sudo dpkg -i openbios-ppc_1.0+svn1018-1_all.deb

A questo punto mi manca solo il disco di installazione della Debian PPC che trovo sul sito di Debian.

Creiamo quindi il disco del nostro sistema:

$ qemu-img create -f qcow2 debian-ppc.qcow2 1G

e quindi eseguire QEMU con il comando seguente per procedere all'installazione del sistema:

$ qemu-system-ppc -m 1024 -bios /usr/share/openbios/openbios-ppc -option-rom /usr/share/qemu/pxe-ne2k_pci.bin -boot d -cdrom debian-testing-powerpc-netinst.iso debian-ppc.qcow2

Se tutto è andato bene vedrete la schermata classica di installazione di Debian! A questo punto il tutto è abbastanza semplice, non ho fatto altro che procere all'installazione del sistema (che mi ha preso un bel po' di tempo...) e di tutti i pacchetti software necessari e quindi sono passato alla compilazione nativa del programma:

$ ./configure
checking build system type... powerpc-unknown-linux-gnu
checking host system type... powerpc-unknown-linux-gnu
checking for gcc... gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
...

Come si vede la compilazione si comporta esattamente come quella su PC solo che il risultato è per una macchina PowerPC, cioè esattamente quello che volevamo.

Conclusioni

Questa soluzione permette di compilare un pacchetto che di per se non è pensato per essere cross compilato in maniera molto agevole ma, naturalmente, anch'essa può avere degli svantaggi.

Innanzi tutto occorre avere una distribuzione Debian della stessa architettura del vostro sistema embedded, il che è quasi sempre vero a parte architetture esotiche; poi ci potrebbero essere alcuni problemi legati alle librerie dinamiche, infatti se la vostra distribuzione embedded è basta su versioni incompatibili della libc, gli eseguibili compilati sulla vostra Debian potrebbero non funzionare bene una volta trasferiti sul sistema embedded. In quest'ultimo caso si può pensare allora di compilare gli applicativi staticamente (se possibile) oppure fare in modo che questi carichino la versione della libc giusta magari trasportando i file necessari direttamente sul sistema embedded... ma queste cose vanno viste caso per caso.

 
 

In primo piano

Simons Voss: un mondo senza chiavi

Simons Voss: un mondo senza chiavi

Il sistema di gestione e di controllo degli accessi 3060 si presenta come un’alternativa con enormi vantaggi...
Pubblicità mirata dei prodotti

Pubblicità mirata dei prodotti

Hai un prodotto o un servizio da pubblicizzare? Fallo su consulenti-ict.it! Pubblicizzare un prodotto...
Recensioni sul Portale

Recensioni sul Portale

Hai un prodotto hardware/software o un libro riguardante uno dei temi dell'ICT? Vuoi farlo conoscere...

Offerte di lavoro

Visualizza Topic »

Eventi

Non ci sono eventi in programma
Maggio 2012
D L M M G V S
29 30 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 1 2
Giugno 2012
D L M M G V S
27 28 29 30 31 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

Sondaggi

busyCaricamento Sondaggio...