Introduzione a Yocto Project

Transcript

Introduzione a Yocto Project
Introduzione a Yocto Project
Stefano Cordibella
[email protected]
EDALab s.r.l. – Networked Embedded Systems
January 8, 2015
Stefano Cordibella
Introduzione a Yocto Project
1/32
EDAlab s.r.l.
In breve...
• Attivi dal 2007 a Verona.
• 15+ collaboratori.
• Principali ambiti:
• applicazioni embedded,
• verifica formale,
• sensoristica wireless.
Stefano Cordibella
Introduzione a Yocto Project
2/32
EDAlab s.r.l.
In breve...
• Attivi dal 2007 a Verona.
• 15+ collaboratori.
• Principali ambiti:
• applicazioni embedded,
• verifica formale,
• sensoristica wireless.
About me
• Qt
• Yocto Project
• Software integrator
• Father of 2
Stefano Cordibella
Introduzione a Yocto Project
2/32
Outline
1 Introduzione
Linux Embedded
Yocto Project
Principali componenti
2 OpenEmbedded Core
Struttura delle directory
Struttura di un layer
Recipe
Image
Machine
Distro
3 BitBake
4 Qt5 in Yocto Project
Stefano Cordibella
Introduzione a Yocto Project
3/32
Introduzione
1 Introduzione
Linux Embedded
Yocto Project
Principali componenti
2 OpenEmbedded Core
Struttura delle directory
Struttura di un layer
Recipe
Image
Machine
Distro
3 BitBake
4 Qt5 in Yocto Project
Stefano Cordibella
Introduzione a Yocto Project
4/32
Introduzione
Linux Embedded
1 Introduzione
Linux Embedded
Yocto Project
Principali componenti
2 OpenEmbedded Core
Struttura delle directory
Struttura di un layer
Recipe
Image
Machine
Distro
3 BitBake
4 Qt5 in Yocto Project
Stefano Cordibella
Introduzione a Yocto Project
5/32
Introduzione
Linux Embedded
Linux Embedded
Definizione
Sistemi operativi basati su kernel linux
utilizzati in ambito embedded.
Stefano Cordibella
Introduzione a Yocto Project
6/32
Introduzione
Linux Embedded
Linux Embedded
Definizione
Sistemi operativi basati su kernel linux
utilizzati in ambito embedded.
Vantaggi
• Sistema completo.
Stefano Cordibella
Introduzione a Yocto Project
6/32
Introduzione
Linux Embedded
Linux Embedded
Definizione
Sistemi operativi basati su kernel linux
utilizzati in ambito embedded.
Vantaggi
• Sistema completo.
• Adattabile alla mia piattaforma.
Stefano Cordibella
Introduzione a Yocto Project
6/32
Introduzione
Linux Embedded
Linux Embedded
Definizione
Sistemi operativi basati su kernel linux
utilizzati in ambito embedded.
Vantaggi
• Sistema completo.
• Adattabile alla mia piattaforma.
Svantaggi
• Gestire la complessità dei software.
Stefano Cordibella
Introduzione a Yocto Project
6/32
Introduzione
Linux Embedded
Linux Embedded
Definizione
Sistemi operativi basati su kernel linux
utilizzati in ambito embedded.
Vantaggi
• Sistema completo.
• Adattabile alla mia piattaforma.
Svantaggi
• Gestire la complessità dei software.
• Aggiornamento e mantenimento.
Stefano Cordibella
Introduzione a Yocto Project
6/32
Introduzione
Linux Embedded
Linux Embedded
Definizione
Sistemi operativi basati su kernel linux
utilizzati in ambito embedded.
Vantaggi
• Sistema completo.
• Adattabile alla mia piattaforma.
Svantaggi
• Gestire la complessità dei software.
• Aggiornamento e mantenimento.
• Molti strumenti per automatizzare i
processi, spesso incompatibili.
Stefano Cordibella
Introduzione a Yocto Project
6/32
Introduzione
Yocto Project
1 Introduzione
Linux Embedded
Yocto Project
Principali componenti
2 OpenEmbedded Core
Struttura delle directory
Struttura di un layer
Recipe
Image
Machine
Distro
3 BitBake
4 Qt5 in Yocto Project
Stefano Cordibella
Introduzione a Yocto Project
7/32
Introduzione
Yocto Project
Yocto Project
Caratteristiche
Insieme di metadati e strumenti integrati per creare e gestire la propria
distribuzione linux embedded.
Stefano Cordibella
Introduzione a Yocto Project
8/32
Introduzione
Yocto Project
Yocto Project
Caratteristiche
Insieme di metadati e strumenti integrati per creare e gestire la propria
distribuzione linux embedded.
• Non è una distribuzione linux embedded.
Stefano Cordibella
Introduzione a Yocto Project
8/32
Introduzione
Yocto Project
Yocto Project
Caratteristiche
Insieme di metadati e strumenti integrati per creare e gestire la propria
distribuzione linux embedded.
• Non è una distribuzione linux embedded.
• É un insieme di strumenti opensource.
Stefano Cordibella
Introduzione a Yocto Project
8/32
Introduzione
Yocto Project
Yocto Project
Punti di forza
• Suite di strumenti integrati.
Stefano Cordibella
Introduzione a Yocto Project
9/32
Introduzione
Yocto Project
Yocto Project
Punti di forza
• Suite di strumenti integrati.
• Gestione del software tramite metadati.
Stefano Cordibella
Introduzione a Yocto Project
9/32
Introduzione
Yocto Project
Yocto Project
Punti di forza
• Suite di strumenti integrati.
• Gestione del software tramite metadati.
• Coinvolgimento di produttori Hw nel progetto.
Stefano Cordibella
Introduzione a Yocto Project
9/32
Introduzione
Yocto Project
Yocto Project
Punti di forza
• Suite di strumenti integrati.
• Gestione del software tramite metadati.
• Coinvolgimento di produttori Hw nel progetto.
• Community di sviluppatori.
Stefano Cordibella
Introduzione a Yocto Project
9/32
Introduzione
Yocto Project
Yocto Project
Punti di forza
• Suite di strumenti integrati.
• Gestione del software tramite metadati.
• Coinvolgimento di produttori Hw nel progetto.
• Community di sviluppatori.
Vantaggi
• Dedico più tempo all’applicazione core del mio sistema.
Stefano Cordibella
Introduzione a Yocto Project
9/32
Introduzione
Yocto Project
Yocto Project
Punti di forza
• Suite di strumenti integrati.
• Gestione del software tramite metadati.
• Coinvolgimento di produttori Hw nel progetto.
• Community di sviluppatori.
Vantaggi
• Dedico più tempo all’applicazione core del mio sistema.
• Nessun vincolo con un particolare produttore Hw/Sw.
Stefano Cordibella
Introduzione a Yocto Project
9/32
Introduzione
Principali componenti
1 Introduzione
Linux Embedded
Yocto Project
Principali componenti
2 OpenEmbedded Core
Struttura delle directory
Struttura di un layer
Recipe
Image
Machine
Distro
3 BitBake
4 Qt5 in Yocto Project
Stefano Cordibella
Introduzione a Yocto Project
10/32
Introduzione
Principali componenti
Principali componenti
Strumenti Core
• Poky: Yocto Project build system;
• BitBake: build engine, interprete dei
metadati;
• OpenEmbedded Core: metadati per i
pacchetti software;
Stefano Cordibella
Introduzione a Yocto Project
11/32
Introduzione
Principali componenti
Principali componenti
Strumenti Core
• Poky: Yocto Project build system;
• BitBake: build engine, interprete dei
metadati;
• OpenEmbedded Core: metadati per i
pacchetti software;
Utilities
• Hob: interfaccia grafica per BitBake;
• Eclipse Plugin: integrazione nell’IDE Eclipse;
• Autobuilder: strumento per l’automazione dei test.
Stefano Cordibella
Introduzione a Yocto Project
11/32
OpenEmbedded Core
1 Introduzione
Linux Embedded
Yocto Project
Principali componenti
2 OpenEmbedded Core
Struttura delle directory
Struttura di un layer
Recipe
Image
Machine
Distro
3 BitBake
4 Qt5 in Yocto Project
Stefano Cordibella
Introduzione a Yocto Project
12/32
OpenEmbedded Core
OpenEmbedded Core
Caratteristiche
• Organizza i metadati per la costruzione delle applicazioni in file detti
recipe.
Stefano Cordibella
Introduzione a Yocto Project
13/32
OpenEmbedded Core
OpenEmbedded Core
Caratteristiche
• Organizza i metadati per la costruzione delle applicazioni in file detti
recipe.
• Ha una struttura modulare a livelli detti layer.
Stefano Cordibella
Introduzione a Yocto Project
13/32
OpenEmbedded Core
OpenEmbedded Core
Caratteristiche
• Organizza i metadati per la costruzione delle applicazioni in file detti
recipe.
• Ha una struttura modulare a livelli detti layer.
• Contiene la definizione di circa 1000 recipe per applicazioni e librerie.
Stefano Cordibella
Introduzione a Yocto Project
13/32
OpenEmbedded Core
OpenEmbedded Core
Caratteristiche
• Organizza i metadati per la costruzione delle applicazioni in file detti
recipe.
• Ha una struttura modulare a livelli detti layer.
• Contiene la definizione di circa 1000 recipe per applicazioni e librerie.
Quick Start
1
Scaricare i sorgenti del progetto.
2
Lanciare lo script oe-init-build-env script.
Modificare la machine target dell’applicazione e le risorse
dell’ambiente di build.
Lanciare bitbake con l’immagine scelta.
3
4
Stefano Cordibella
Introduzione a Yocto Project
13/32
OpenEmbedded Core
Struttura delle directory
1 Introduzione
Linux Embedded
Yocto Project
Principali componenti
2 OpenEmbedded Core
Struttura delle directory
Struttura di un layer
Recipe
Image
Machine
Distro
3 BitBake
4 Qt5 in Yocto Project
Stefano Cordibella
Introduzione a Yocto Project
14/32
OpenEmbedded Core
Struttura delle directory
Struttura delle directory
Directory poky
bitbake contiene i binari e gli script
per il build engine bitbake;
build workspace di
cross-compilazione e spazio
dove di default vengono
scaricati i pacchetti sorgenti;
meta-* directories che compongono i
layer del progetto, è possibile
crearne di proprie o
includerne altre di terze parti;
Stefano Cordibella
Introduzione a Yocto Project
15/32
OpenEmbedded Core
Struttura di un layer
1 Introduzione
Linux Embedded
Yocto Project
Principali componenti
2 OpenEmbedded Core
Struttura delle directory
Struttura di un layer
Recipe
Image
Machine
Distro
3 BitBake
4 Qt5 in Yocto Project
Stefano Cordibella
Introduzione a Yocto Project
16/32
OpenEmbedded Core
Struttura di un layer
Struttura di un layer
Caratteristiche
• Definizione delle diverse entità dell’ambiente di build.
Stefano Cordibella
Introduzione a Yocto Project
17/32
OpenEmbedded Core
Struttura di un layer
Struttura di un layer
Caratteristiche
• Definizione delle diverse entità dell’ambiente di build.
Recipe regole per la generazione di un pacchetto software.
Stefano Cordibella
Introduzione a Yocto Project
17/32
OpenEmbedded Core
Struttura di un layer
Struttura di un layer
Caratteristiche
• Definizione delle diverse entità dell’ambiente di build.
Recipe regole per la generazione di un pacchetto software.
Package Group insieme di pacchetti
Stefano Cordibella
Introduzione a Yocto Project
17/32
OpenEmbedded Core
Struttura di un layer
Struttura di un layer
Caratteristiche
• Definizione delle diverse entità dell’ambiente di build.
Recipe regole per la generazione di un pacchetto software.
Package Group insieme di pacchetti
Image informazioni per la generazione del rootfs
Stefano Cordibella
Introduzione a Yocto Project
17/32
OpenEmbedded Core
Struttura di un layer
Struttura di un layer
Caratteristiche
• Definizione delle diverse entità dell’ambiente di build.
Recipe regole per la generazione di un pacchetto software.
Package Group insieme di pacchetti
Image informazioni per la generazione del rootfs
Machine informazioni sulla piattaforma target
Stefano Cordibella
Introduzione a Yocto Project
17/32
OpenEmbedded Core
Struttura di un layer
Struttura di un layer
Caratteristiche
• Definizione delle diverse entità dell’ambiente di build.
Recipe regole per la generazione di un pacchetto software.
Package Group insieme di pacchetti
Image informazioni per la generazione del rootfs
Machine informazioni sulla piattaforma target
Distro versioni dei pacchetti e risoluzione delle ambiguità
Stefano Cordibella
Introduzione a Yocto Project
17/32
OpenEmbedded Core
Struttura di un layer
Struttura di un layer
Caratteristiche
• Definizione delle diverse entità dell’ambiente di build.
Recipe regole per la generazione di un pacchetto software.
Package Group insieme di pacchetti
Image informazioni per la generazione del rootfs
Machine informazioni sulla piattaforma target
Distro versioni dei pacchetti e risoluzione delle ambiguità
• Recipe organizzati in gruppi funzionali.
Stefano Cordibella
Introduzione a Yocto Project
17/32
OpenEmbedded Core
Struttura di un layer
Struttura di un layer
Caratteristiche
• Definizione delle diverse entità dell’ambiente di build.
Recipe regole per la generazione di un pacchetto software.
Package Group insieme di pacchetti
Image informazioni per la generazione del rootfs
Machine informazioni sulla piattaforma target
Distro versioni dei pacchetti e risoluzione delle ambiguità
• Recipe organizzati in gruppi funzionali.
• Fornito da terze parti o creato dallo sviluppatore del sistema.
Stefano Cordibella
Introduzione a Yocto Project
17/32
OpenEmbedded Core
Struttura di un layer
Recipe
Definizione
Regole per la generazione di un pacchetto software (applicativo o libreria).
Stefano Cordibella
Introduzione a Yocto Project
18/32
OpenEmbedded Core
Struttura di un layer
Recipe
Definizione
Regole per la generazione di un pacchetto software (applicativo o libreria).
Task principali
2
Dove reperire i sorgenti: do_fetch
Generazione dei binari: do_patch, do_configure, compile.
3
Pacchettizzazione e deploy nel rootfs do_install e do_package.
1
Stefano Cordibella
Introduzione a Yocto Project
18/32
OpenEmbedded Core
Struttura di un layer
Recipe
Definizione
Regole per la generazione di un pacchetto software (applicativo o libreria).
Task principali
2
Dove reperire i sorgenti: do_fetch
Generazione dei binari: do_patch, do_configure, compile.
3
Pacchettizzazione e deploy nel rootfs do_install e do_package.
1
Caratteristiche
• Dipendono dal tipo di build system utilizzato (autotools, cmake,
qmake, . . . ).
• Possono essere sovrascritti dal singolo recipe o estesi con azioni
_prepend o _append.
Stefano Cordibella
Introduzione a Yocto Project
18/32
OpenEmbedded Core
Struttura di un layer
Recipe
Esempio: recipe minimale
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
DESCRIPTION = " The Qt Gui for Wireless Sensor Network "
LICENSE = " CLOSED "
PR = " r12 "
# To download files :
SRC_URI = " bzr :// www . edalab . it / projects /...; protocol =
bzr + https ; rev = -1 "
inherit qt4e
PACKAGES = " $ { PN } "
FILES_$ { PN } = " \
$ { bindir }/ guiwsn \
$ { sysconfdir }/ gui - wsn . conf \
"
Stefano Cordibella
Introduzione a Yocto Project
19/32
OpenEmbedded Core
Struttura di un layer
Recipe
Esempio: task
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
...
inherit autotools
# Task override :
do_configure () {
./ my_configure
}
# Task append :
do_install_append () {
make my_install_append
}
...
Stefano Cordibella
Introduzione a Yocto Project
20/32
OpenEmbedded Core
Struttura di un layer
Package Group
Definizione
Insieme di recipe gestibili come unica entità.
Stefano Cordibella
Introduzione a Yocto Project
21/32
OpenEmbedded Core
Struttura di un layer
Package Group
Definizione
Insieme di recipe gestibili come unica entità.
Esempio
1
2
3
4
5
6
7
8
9
10
11
12
13
DESCRIPTION = " Create Snort task "
LICENSE = " CLOSED "
PR = " r3 "
inherit packagegroup
RDEPENDS_$ { PN } = " \
daq \
libdnet \
oinkmaster \
snort \
"
Stefano Cordibella
Introduzione a Yocto Project
21/32
OpenEmbedded Core
Struttura di un layer
Image
Caratteristiche
• Elenco dei pacchetti da installare.
• Funzionalità:
• splash,
• ssh,
• debug tools,
• ...
• Tipi di file system:
• ext3,
• jffs2,
• ...
• Azioni di postprocess.
• Sorgenti per gli aggiornamenti del software dell’immagine.
Stefano Cordibella
Introduzione a Yocto Project
22/32
OpenEmbedded Core
Struttura di un layer
Image
Esempio
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
DESCRIPTION = " Test image "
LICENSE = " CLOSED "
PR = " r2 "
inherit core - image
IMAGE_FEATURES += " splash "
IMAGE_INSTALL += " \
packagegroup - snort \
vim \
"
R O O T F S _ P O S T P R O C E S S _ C O M M A N D += " add_initramfs ; "
IMAGE_FSTYPES = " ext3 "
Stefano Cordibella
Introduzione a Yocto Project
23/32
OpenEmbedded Core
Struttura di un layer
Machine
Caratteristiche
• Architettura target.
• Funzionalità supportate in hardware dalla macchina.
• Elenco dei pacchetti compatibili.
• Indirizzi di memoria per le aree bootloader e kernel.
Stefano Cordibella
Introduzione a Yocto Project
24/32
OpenEmbedded Core
Struttura di un layer
Machine
Caratteristiche
• Architettura target.
• Funzionalità supportate in hardware dalla macchina.
• Elenco dei pacchetti compatibili.
• Indirizzi di memoria per le aree bootloader e kernel.
Esempio
1
2
3
4
5
6
7
8
9
DEFAULTTUNE ?= " cortexa8hf - neon "
include conf / machine / include / tune - cortexa8 . inc
IMAGE_FSTYPES += " tar . bz2 jffs2 "
E X T R A _ I M A G E C M D _ j f f s 2 = " - lnp "
KERNEL_IMAGETYPE = " uImage "
MACHINE_FEATURES = " usbgadget usbhost vfat alsa "
Stefano Cordibella
Introduzione a Yocto Project
24/32
OpenEmbedded Core
Struttura di un layer
Distro
Caratteristiche
• Numero di versione.
• Funzionalità abilitate per la distribuzione.
• Elenco specifico delle versioni dei pacchetti da utilizzare.
Stefano Cordibella
Introduzione a Yocto Project
25/32
OpenEmbedded Core
Struttura di un layer
Distro
Caratteristiche
• Numero di versione.
• Funzionalità abilitate per la distribuzione.
• Elenco specifico delle versioni dei pacchetti da utilizzare.
Esempio
1
2
3
4
5
6
7
8
DISTRO_VERSION = " 2.99.4 "
P R E F E R R E D _ P R O V I D E R _ j pe g = " jpeg "
PREFERRED_VERSION_linux - libc - headers = " 3.0 "
P R E F E R R E D _ V E R S I O N _ a p a c h e 2 = " 2.2.22 "
DISTRO_FEATURES = " ext2 zeroconf pci x11 "
Stefano Cordibella
Introduzione a Yocto Project
25/32
BitBake
1 Introduzione
Linux Embedded
Yocto Project
Principali componenti
2 OpenEmbedded Core
Struttura delle directory
Struttura di un layer
Recipe
Image
Machine
Distro
3 BitBake
4 Qt5 in Yocto Project
Stefano Cordibella
Introduzione a Yocto Project
26/32
BitBake
BitBake
Definizione
Esegue i task specificati nei recipe gestendone le dipendenze.
Stefano Cordibella
Introduzione a Yocto Project
27/32
BitBake
BitBake
Definizione
Esegue i task specificati nei recipe gestendone le dipendenze.
Caratteristiche
• Può essere lanciato sia su recipe che su immagini.
Stefano Cordibella
Introduzione a Yocto Project
27/32
BitBake
BitBake
Definizione
Esegue i task specificati nei recipe gestendone le dipendenze.
Caratteristiche
• Può essere lanciato sia su recipe che su immagini.
• Crea l’albero delle dipendenze dei task e li esegue in parallelo.
Stefano Cordibella
Introduzione a Yocto Project
27/32
BitBake
BitBake
Definizione
Esegue i task specificati nei recipe gestendone le dipendenze.
Caratteristiche
• Può essere lanciato sia su recipe che su immagini.
• Crea l’albero delle dipendenze dei task e li esegue in parallelo.
• Può eseguire task singoli.
Stefano Cordibella
Introduzione a Yocto Project
27/32
BitBake
BitBake
Definizione
Esegue i task specificati nei recipe gestendone le dipendenze.
Caratteristiche
• Può essere lanciato sia su recipe che su immagini.
• Crea l’albero delle dipendenze dei task e li esegue in parallelo.
• Può eseguire task singoli.
• Integra una modalità di debug devshell.
Stefano Cordibella
Introduzione a Yocto Project
27/32
BitBake
Comandi Principali
Esecuzione di tutti i task di un recipe
1 $ bitbake < recipe >
• Esegue tutti i task per uno specifico recipe.
Stefano Cordibella
Introduzione a Yocto Project
28/32
BitBake
Comandi Principali
Esecuzione di tutti i task di un recipe
1 $ bitbake < recipe >
• Esegue tutti i task per uno specifico recipe.
clean
1 $ bitbake -c clean < recipe >
• Esegue il task do_clean per il recipe; esiste anche la variante
cleanall che rimuove anche i sorgenti scaricati nel workspace.
Stefano Cordibella
Introduzione a Yocto Project
28/32
BitBake
Comandi Principali
Esecuzione di tutti i task di un recipe
1 $ bitbake < recipe >
• Esegue tutti i task per uno specifico recipe.
clean
1 $ bitbake -c clean < recipe >
• Esegue il task do_clean per il recipe; esiste anche la variante
cleanall che rimuove anche i sorgenti scaricati nel workspace.
listtasks
1 $ bitbake -c listtasks < recipe >
• Mostra l’elenco dei task per il recipe/image specificato.
Stefano Cordibella
Introduzione a Yocto Project
28/32
BitBake
Comandi Principali
<task>
1 $ bitbake -c < nometask > < recipe >
• Esegue il singolo task del recipe specificato e termina.
Stefano Cordibella
Introduzione a Yocto Project
29/32
BitBake
Comandi Principali
<task>
1 $ bitbake -c < nometask > < recipe >
• Esegue il singolo task del recipe specificato e termina.
devshell
1 $ bitbake -c devshell < recipe >
• Viene aperta una shell nel tree dei sorgenti del progetto dopo il task
di patch.
• É possibile sperimentare modifiche ai sorgenti in loco, o visualizzare
l’output dei task di build precedenti.
Stefano Cordibella
Introduzione a Yocto Project
29/32
Qt5 in Yocto Project
1 Introduzione
Linux Embedded
Yocto Project
Principali componenti
2 OpenEmbedded Core
Struttura delle directory
Struttura di un layer
Recipe
Image
Machine
Distro
3 BitBake
4 Qt5 in Yocto Project
Stefano Cordibella
Introduzione a Yocto Project
30/32
Qt5 in Yocto Project
meta-qt5
Descrizione
Layer esterno ad OpenEmbedded Core per utilizzare le Qt5 nella propria
distribuzione.
Struttura del layer
classes definisce la classi qmake5 e
cmake_qmake;
conf definisce le versioni della libreria
e delle sue componenti qt5;
recipes-qt contiene i recipes per:
• compilare il framework qt5,
• recipes per la meta
toolchain
• esempi di applicazioni qt5;
Stefano Cordibella
Introduzione a Yocto Project
31/32
Qt5 in Yocto Project
Grazie per l’attenzione
Domande?
Stefano Cordibella
Introduzione a Yocto Project
32/32