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