Sei sulla pagina 1di 5

,O SULPR 2 RRN PR R P L R

( FR L D H LEUD WH VRGGLVID LR H FKH VR R D SUHVH WDU L LO SULPR


(2 RRN PR RWHPDWLFR D L T DVL ELWHPDWLFR , IDWWL DOO L WHU R FR WLH H W WR
ULDO SDUWH GR GD HUR LO SULPR V (PEHGGHG 1 /L DGDWWR D SUR UDPPDWRUL FKH
R OLR R DGGH WUDUVL HOO DIIDVFL D WH PR GR GL /L SURIHVVLR DOH LPSDUD GR D
FRPSLODUH LO .HU HO SUHSDUDUH LO URRW ILOHV VWHP IL R DG DUUL DUH D UHDOL DUH D GLVWUR
PL LPDOH PD I LR D WH SHU LO DV ,

DVSEHUU , FKH SRL VDU SURWD R LVWD GHO VHFR GR W WRULDO D LGD DGDWWD D W WWL
L IRUPDWLFL H VPD HWWR L DO VHFROR PDNHUV SHU LPSDUDUH D FR IL UDUOR FRUUHWWD
PH WH RWWLPL DUOR SHU OD D L D LR H HE WLOL DUOR SHU FUHDUH URSER SHUVR
DOH GR H VDO DUH L SURSUL ILOH SHU UH GHUOL DFFHVVLELOL GDOOD VWHVVD UHWH (WKHU HW R :LIL
DOOD T DOH q FR HVVR LO RVWUR DV , R DGGLULWW UD WUDPLWH L WHU HW IL R DG DOWUR
R GLVSRVLWL R PRELOH HGUHPR D FKH FRPH UHDOL DUH PHGLD FH WHU FRPSOHWR GL
WHOHFRPD GR , VIU WWD GR R GHL WD WL WHOHFRPD GL FKH DEELDPR L FDVD

, IL H RUUHL IDU RWDUH V OOD FRSHUWL D LO FDPELR GL VLPEROR L L LDOH FKH SUHFHGH OD
PHUD LR H H FKH LGH WLILFKHU D FKH L VH LWR OL (2 RRN H WUD ULVHU DWL D OL
DEER DWL ODWL P

(2 RRN PHWWHWH HOR HOOR VWDFN

(PD HOH R D L
PE GG G 1 /L
S U GR G UR

L RPSLO U LO N U O
, WURG LR H lavorando.

C
reare un sistema GNU/Linux da zero costi- Per agevolare la lettura, l’articolo è strutturato in

tuisce un buon esercizio per comprendere più parti distinte:

alcuni aspetti chiave del suo funzionamen- • preparazione del kernel

to interno. • preparazione del root lesystem

Tuttavia, oltre all’aspetto didattico, ci sono an- • integrazione e test su QEMU [2]

che risvolti pratici Tutti i passaggi illustrati di seguito sono stati te-

interessanti: conoscere i componenti e gli stru- stati su un sistema desktop GNU/Linux usando

menti base che servono a costruire un sistema la recente distribuzione Ubuntu 12.04.1.

GNU/Linux ci permette spesso, specie in ambito


embedded, di generare ambienti più compat- HT LVLWL
ti ed ef cienti rispetto alle soluzioni general- Il primo requsito per creare un sistema GNU/

purpose messe a disposizione dal fornitore del Linux consiste nello scegliere un’architettura

prodotto o della board di sviluppo su cui stiamo target. Dato che l’articolo ha un taglio prevalen-
temente orientato all’embedded e vista la pre-
PE GG G /L U GR G UR

donimanza delle architetture ARM in tale setto-


re, opteremo per un’architettura ARM.
Una volta scelta l’architettura target abbiamo bi-
sogno di due componenti fondamentali:
1. una piattaforma di prova su cui testare il no-
stro sistema
2. una toolchain che ci permetta di cross-com-
pilare i binari che vanno a costituire l’intero
sistema operativo
Nel nostro caso prenderemo in esame la Versa-
tile Express (vexpress-a9) [5], visto che è quella
RDUG LUW DOH GL V LO SSR
supportata perfettamente dal kernel “mainline”
Il mercato mette a disposizione una vasta gam-
(la versione del kernel uf ciale, reperibile da
ma di board di sviluppo ARM-based, anche a
http://www.kernel.org), sia da QEMU, senza do-
basso costo. C CE U QNG E OGP CTG
ver applicare patch aggiuntive. Inoltre, la Versa-
PGNNC ETGC QPG P U U GOC ) .P ZU
tile Express monta un core Cortex-A9, una CPU
# /R HCTNQ EQORNG COGP G C EQU Q GTQ
ARM-based utilizzata su gran parte dei tablet,
GO NCP Q T CNOGP G NC R C CHQTOC U
smartphone e netbook di recente produzione.
N RRQ.
Emulare la piattaforma di sviluppo è piuttosto
Come software di emulazione ci baseremo su
semplice, basta lanciare il comando:
QEMU [4], che di fatto costituisce l’emulatore
$ qemu-system-arm -M vexpress-a9 -kernel ash.img
di architettura per eccellenza nel mondo Linux.
Dove ash.img è un le contenente l’immagine
QEMU permette di emulare diverse piattafor-
del nostro kernel/ rmware che vogliamo far gi-
me ARM-based, ad esempio nella versione di
rare.
QEMU installata su Ubuntu 12.04 abbiamo a di-
Nei passi seguenti vedremo come generare tale
sposizione le seguenti piattaforme:
immagine.

RROFKDL GL FURVV FRPSLOD LR H


La toolchain è un insieme di strumenti (tipica-
mente un compilatore, un linker e delle librerie)
che ci permettono di generare le applicazioni
per il sistema target a partire dai sorgenti. La
GNU toolchain tipica è costituita dal compilatore
GCC, le binutils (strumenti per la manipolazione
dei binari) e le librerie glibc.
Per questa prima fase ci vengono in aiuto le
toolchain pre-compilate (creare un sistema da
zero non implica necessariamente di doverci ri-
compilare anche gli strumenti per creare il siste-
ma stesso).
PE GG G /L U GR G UR

In rete si trovano molte toolchain pre-compilate, 2GT N GP G Q N RTQITCOOC QTG CN Q N GNNQ


nel nostro caso utilizzeremo la Linaro Toolchain .P Z UGORTG NQ U GUUQ P RGP GP GOGP
Binaries [3], una toolchain ottimizzata per le più G C Q G I TC NC RTQRT C CRRN EC QPG.
recenti famiglie di CPU ARM (Cortex A8, A9, La prima fase della ricompilazione del kernel
etc.). consiste nel processo di con gurazione. Esso
Il setup della toolchain è costituito dai seguenti permette di scegliere la particolare architettura
passaggi: che vogliamo utilizzare per il layer di basso li-
• download dei binari della toolchain da internet: vello, assieme a tutti i driver e le funzionalità di
https://launchpad.net/linaro-toolchain-binari- alto livello che vogliamo fornire alle applicazioni
es/trunk/2012.09/+download/... user-space.
• estrazione del pacchetto .tar.bz2:
Come abbiamo detto la piattaforma Versati-
le Express è già supportata

• setup della variabile di ambiente PATH per pienamente dal kernel Linux,
rendere disponibili i binari della toolchain quindi possiamo procedere direttamente alla
dalla shell corrente: con gurazione senza dover applicare patch o
modi care codice:

)DVH SUHSDUD LR H GHO NHU HO


A questo punto abbiamo tutti gli strumenti ne- Le variabili di ambiente ARCH e CROSS_COM-
cessari per iniziare a sviluppare sulla board vir- PILE sono informazioni per il compilatore; esse
tuale. permettono di selezionare la particolare archi-
Il primo passo consiste nel reperire i sorgenti tettura (ARCH) e la particolare versione com-
“mainline” del kernel da http://www.kernel.org e pilatore (CROSS_COMPILE) per generare il
ricompilarli per la nostra archiettura target. codice oggetto.
Al momento della stesura di questo articolo l’ul- L’opzione “vexpress_defcon g” viene usata dal
timo kernel del ramo “stable” è il 3.5.4, proce- kernel nel processo di build: essa permette di
diamo quindi al download e all’estrazione dei selezionare la con gurazione di default (defcon-
sorgenti: g) stabilita dalla comunità di sviluppatori che
mantengono il codice per tale architettu-
ra. Le varie con gurazioni *_defcon g per
ARM si trovano tutte in arch/arm/con gs/*.
Il kernel Linux supporta un’ampia gamma di In ne resta da effettuare il passo di compilazio-
architetture e piattaforme eterogenee: fonda- ne vero e proprio:
mentalmente esso è composto da un layer di
basso livello
(./arch/*) che si interfaccia direttamente con il La ricompilazione di un intero kernel richiede
particolare hardware ed esporta ai livelli più alti dai 5 ai 10 minuti. Al termine, se tutto è andato
interfacce generiche indipendenti dall’hardware correttamente, troveremo il seguente le nelle
sottostante. directory dei sorgenti del kernel:

Potrebbero piacerti anche