27 0 601KB
,O SULPR 2 ( FR (2
RRN PR R P L R
L D H
LEUD WH VRGGLVID LR H
RRN PR RWHPDWLFR D
FKH VR R D SUHVH WDU L LO SULPR
L T DVL ELWHPDWLFR , IDWWL DOO L WHU R FR WLH H
ULDO SDUWH GR GD HUR LO SULPR V (PEHGGHG R OLR R DGGH WUDUVL
1
/L
DGDWWR D SUR UDPPDWRUL FKH
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 PL LPDOH PD I DVSEHUU
LR D WH SHU LO
L IRUPDWLFL H VPD HWWR L
DUH
D GLVWUR
DV ,
, FKH SRL VDU SURWD R LVWD GHO VHFR GR W WRULDO
PH WH RWWLPL
W WR
D
LGD DGDWWD D W WWL
DO VHFROR PDNHUV SHU LPSDUDUH D FR IL
DUOR SHU OD D L D LR H
HE
WLOL
DUOR SHU FUHDUH
UDUOR FRUUHWWD 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
R GLVSRVLWL R PRELOH WHOHFRPD GR , , IL H
HGUHPR D FKH FRPH UHDOL
VIU WWD GR
RUUHL IDU
DV , R DGGLULWW UD WUDPLWH L WHU HW IL R DG
(2
RRN
(PD
HOH
RWDUH V OOD FRSHUWL D LO FDPELR GL VLPEROR L L LDOH FKH SUHFHGH OD P
PHWWHWH HOR HOOR VWDFN
R D
PHGLD FH WHU FRPSOHWR GL
R GHL WD WL WHOHFRPD GL FKH DEELDPR L FDVD
PHUD LR H H FKH LGH WLILFKHU D FKH L DEER DWL ODWL
DUH
DOWUR
L
VH
LWR
OL (2
RRN H WUD ULVHU DWL D OL
PE GG G 1 /L S U GR G UR
L RPSLO U LO N U O , WURG
C
LR H
lavorando.
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 prevalentemente orientato all’embedded e vista la pre-
PE GG G
/L
U
GR G
UR
donimanza delle architetture ARM in tale settore, opteremo per un’architettura ARM. Una volta scelta l’architettura target abbiamo bisogno di due componenti fondamentali: 1. una piattaforma di prova su cui testare il nostro sistema 2. una toolchain che ci permetta di cross-compilare i binari che vanno a costituire l’intero sistema operativo RDUG
Nel nostro caso prenderemo in esame la Versatile Express (vexpress-a9) [5], visto che è quella
LUW DOH GL V LO SSR
Il mercato mette a disposizione una vasta gamma di board di sviluppo ARM-based, anche a basso costo.
C CE
PGNNC ETGC QPG # /R GO NCP Q
U
QNG E OGP CTG
P U U GOC )
.P ZU
HCTNQ EQORNG COGP G C EQU Q GTQ T CNOGP G NC R C CHQTOC
U
N RRQ. Come software di emulazione ci baseremo su QEMU [4], che di fatto costituisce l’emulatore di architettura per eccellenza nel mondo Linux. QEMU permette di emulare diverse piattaforme ARM-based, ad esempio nella versione di QEMU installata su Ubuntu 12.04 abbiamo a disposizione le seguenti piattaforme:
supportata perfettamente dal kernel “mainline” (la versione del kernel uf ciale, reperibile da http://www.kernel.org), sia da QEMU, senza dover applicare patch aggiuntive. Inoltre, la Versatile Express monta un core Cortex-A9, una CPU ARM-based utilizzata su gran parte dei tablet, smartphone e netbook di recente produzione. Emulare la piattaforma di sviluppo è piuttosto semplice, basta lanciare il comando: $ qemu-system-arm -M vexpress-a9 -kernel ash.img
Dove ash.img è un le contenente l’immagine del nostro kernel/ rmware che vogliamo far girare. Nei passi seguenti vedremo come generare tale immagine. RROFKDL GL FURVV FRPSLOD LR H La toolchain è un insieme di strumenti (tipicamente 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 ricompilare anche gli strumenti per creare il sistema stesso).
PE GG G
/L
U
In rete si trovano molte toolchain pre-compilate,
2GT N
nel nostro caso utilizzeremo la Linaro Toolchain
.P Z
Binaries [3], una toolchain ottimizzata per le più
GR G
UR
GP G Q N RTQITCOOC QTG
CN Q N GNNQ
UGORTG NQ U GUUQ P RGP GP GOGP
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: • download dei binari della toolchain da internet: https://launchpad.net/linaro-toolchain-binaries/trunk/2012.09/+download/... • estrazione del pacchetto .tar.bz2:
che vogliamo utilizzare per il layer di basso livello, assieme a tutti i driver e le funzionalità di alto livello che vogliamo fornire alle applicazioni user-space. Come abbiamo detto la piattaforma Versatile Express è già supportata
•
pienamente dal kernel Linux,
setup della variabile di ambiente PATH per 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 architettura. 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: