SlideShare uma empresa Scribd logo
1 de 29
Baixar para ler offline
Introduction à Yocto / OpenEmbedded


Pierre Ficheux (pierre.ficheux@openwide.fr)

Avril 2013




                      Yocto / OpenEmbedded    1
Présentation Open Wide


●   SSII/SSLL créée en septembre 2001 avec Thales et
    Schneider
●   Indépendante depuis 2009
●   Environ 110 salariés sur Paris, Lyon et Toulouse
    (depuis janvier 2012)
●   Industrialisation de composants open source
●   Trois activités :
        –   OW Système d'Information (Java/PHP)
        –   OW Outsourcing: hébergement
        –   OW Ingénierie: informatique industrielle




                              Yocto / OpenEmbedded                 2
Présentation PF

●   Utilisateur de logiciels libres depuis 1989
●   Utilisateur de Linux depuis 1992
●   Auteur des 4 éditions de l'ouvrage « Linux embarqué »
    (Eyrolles), 4ème édition parue en juin 2012
●   Auteur GNU Linux Magazine et Open Silicium
●   CTO Open Wide Ingénierie, enseignant EPITA




                          Yocto / OpenEmbedded                 3
Programme


●   Créer une distribution embarquée
●   Introduction à OpenEmbedded
●   Yocto Project(s)
●   Construction d'une distribution pour Raspberry Pi
●   Exemple de recette simple (Hello World)
●   Démonstration sur RPi




                         Yocto / OpenEmbedded           4
Créer une distribution
                                                       « embarquée »

●   Choisir un outil commercial (Wind River, Montavista)
●   Utiliser un outil de génération : Buildroot,
    OpenEmbedded, OpenWrt, LTIB
●   Adapter une distribution Linux classique
         –   Souvent limité au niveau matériel
         –   Empreinte mémoire et flash importante
         –   Temps de démarrage
●   Créer la distribution « from scratch »
         –   Approche plutôt « pédagogique »
         –   Difficile/impossible à industrialiser → dépendances,
               mise à jour


                          Yocto / OpenEmbedded                        5
Les principaux outils disponibles
●   OpenEmbedded
        –   Moteur écrit en Python (bitbake)
        –   Puissant mais lourd
        –   Basé sur des fichiers de configuration (?)
●   Buildroot
        –   Basé sur la commande make
        –   Au départ un démonstrateur pour uClibc
        –   Bon outil mais pas de gestion de paquets
        –   Utilisé par Google Fiber project
●   OpenWrt
        –   Dérivé de BR + gère les paquets IPK
        –   Orienté vers les IAD (Internet Access Device)
●   Autres: LTIB (Freescale), PTXdist (Pengutronix)
                           Yocto / OpenEmbedded             6
OpenEmbedded, introduction

●   OE est une « généralisation » de l'approche utilisée
    dans BR → framework de compilation croisée
●   Démarrage en 2003 pour OpenZaurus
●   Utilise un moteur écrit en Python (bitbake) et un
    ensemble de règles utilisant un principe d'héritage →
    recipe (recette = fichier .bb)
●   Gère la notion de paquet binaire, contrairement à
    BR (IPK, RPM, DEB)
●   Plusieurs milliers de paquets disponibles
●   Par contre :
         –   Peu d'interfaces de configuration (en cours)
         –   Processus de compilation plus lourd qu'avec BR
●   Très utilisé dans l'industrie (Yocto Project)
                            Yocto / OpenEmbedded              7
Yocto Project(s)

●   Le projet « chapeau » le plus important autour de OE
    (Poky, Eglibc, Hob, Matchbox, infrastructures de test,
    QA, …)
●   Contributions Intel, Wind River, Montavista, Mentor
    Graphics, … (20 participants officiels)
●   Architecte : Richard Purdie → rejoint la Linux
    Foundation en tant que « fellow » en décembre 2010
●   Organisation similaire à celle de l'équipe du noyau
    Linux
    « meritocracy presided over by a benevolent dictator »
●   Forte présence d'Intel mais l’engagement de la
    fondation Linux permet une collaboration fructueuse ;-)



                         Yocto / OpenEmbedded                  8
Yocto Project(s), suite
●   Utilisé par les éditeurs pour leurs produits commerciaux
●   Utilisé par les fabricants de matériel pour les BSP
    (Board Support Package)
●   Pas réellement une « distribution » mais fournit des
    templates et outils pour créer des distributions
         –   Support matériel (meta-intel, meta-raspberrypi)
         –   Portage de composants (meta-mono)
         –   Distributions (meta-yocto, meta-angstrom)
         –   Couches « métier » (meta-ivi) → GENIVI
    It's not an embedded Linux distribution
    – it creates a custom one for you
●   Poky est le projet « distribution de référence »
         –   Poky 8.0 (danny) succède Poky 7.0 (denzel)
             Poky 8.0 (Yocto Project 1.3 Reference Distro)
                            Yocto / OpenEmbedded                         9
Quelques distributions


●   Angstrom (meta-angstrom)
        –   Distribution basée sur OE, fait partie du projet Yocto
              depuis 9/2012
        –   Approche binaire similaire aux distributions
              classiques
●   Arago (meta-arago-distro)
        –   Fournie par TI (OMAP)
●   ELDK (meta-eldk)
        –   Embedded Linux Development Kit, Denx Software
●   De plus en plus d'acteurs du domaine se rapprochent
    de Yocto Project !
            http://git.eukrea.fr

                             Yocto / OpenEmbedded                       10
Métadonnées OE
●   Les recettes (.bb) décrivent la manière de compiler un
    paquet (ou plusieurs) pour la cible
           $ bitbake ma_recette
●   Un .bb peut décrire UN composant mais également
    une distribution complète
●   Les classes (.bbclass) décrivent des règles
    communes aux recettes (comment traiter Autotools,
    CMake, …)
●   Les fichiers de configuration (.conf), définissent les
    paramètres de la distribution cible (type de machine,
    nombre de processus en parallèle, …)
●   Extrait de conf/local.conf
           BB_NUMBER_THREADS = "8"
           PARALLEL_MAKE = "-j 8"
           MACHINE ?= "raspberrypi"
                          Yocto / OpenEmbedded               11
Métadonnées OE
●   Les recettes (.bb) décrivent la manière de compiler un
    paquet (ou plusieurs) pour la cible :
           $ bitbake ma_recette
●   Un .bb peut décrire UN composant mais également
    une distribution complète
●   Les classes (classes/*.bbclass) décrivent des
    règles communes aux recettes (autotools, cmake,
    module, ...)
●   Les fichiers de configuration (.conf), définissent les
    paramètres de la distribution cible (poky.conf,
    local.conf, ...)
●   Extrait de conf/local.conf
           BB_NUMBER_THREADS = "8"
           PARALLEL_MAKE = "-j 8"
           MACHINE ?= "raspberrypi"
                          Yocto / OpenEmbedded               12
Métadonnées OE, suite
●   OE est rarement utilisé seul
●   Il fournit les « métadonnées » principales (OE-Core)
    permettant de construire des distributions
●   Les autres couches (layers) sont disponibles sur :
          http://layers.openembedded.org/layerindex
●   OE fournit cependant des recettes pour des images de
    test simples (QEMU)
          $ cd meta/recipes-core/images/
          $ ls -1 *.bb
          build-appliance-image.bb
          core-image-base.bb
          core-image-minimal.bb
          core-image-minimal-dev.bb
          core-image-minimal-initramfs.bb
          core-image-minimal-mtdutils.bb

                           Yocto / OpenEmbedded                 13
Bitbake


●   L’outil bitbake permet de créer un composant OE
    allant du simple paquet à une distribution complète :
           $ bitbake vim
           $ bitbake core-image-minimal
           $ bitbake rpi-basic-image
●   Il parcourt les fichiers de configuration afin de
    déterminer quels sont les composants à construire en
    fonction des recettes
●   L’outil est équivalent à make dans le cas de Buildroot
●   Pour chaque paquet: fetch, unpack, patch, configure,
    compile, stage, install, package, ...


                         Yocto / OpenEmbedded                14
Installation Yocto/OE pour RPi

●   Installation de Poky (Yocto reference distro)
    $ git clone git://git.yoctoproject.org/poky
●   Installation de la couche RPi (meta-raspberrypi)
    $ cd poky
    $ git clone git://git.yoctoproject.org/meta-raspberrypi
●   Création du répertoire de travail
    $ . ./oe-init-build-env rpi-build
●   Ajout de la couche RPi à conf/bblayers.conf
    BBLAYERS ?= " 
      ...
      <path>/poky/meta-raspberrypi 
      "
●   Ajout du type de machine à conf/local.conf
    MACHINE ?= "raspberrypi"


                           Yocto / OpenEmbedded               15
Production d'une image de test
●   Les archives des paquets sont stockées dans rpi-
    build/downloads lors de l'étape fetch
●   La couche RPi fournit une image de test dérivée de
    core-image-minimal
    $ ls -1 meta-raspberrypi/recipes-core/images/
    rpi-basic-image.bb
    rpi-hwup-image.bb
●   On produit l'image par :
           $ bitbake rpi-basic-image
●   Par défaut, Poky utilise le format de paquet RPM (voir
    conf/local.conf)
●   L'image de la SD est produite automatiquement
●   Environ 50 mn sur un 16 CPU Xeon mais 12h sur un
    Core2 Duo...

                          Yocto / OpenEmbedded               16
Répertoires produits


●   Le répertoire rpi-build/downloads contient les
    archives téléchargées (à partager !)
●   Le répertoire rpi-build/tmp est utilisé comme
    « sortie » avec les sous-répertoires deploy et work
    $ ls -1 deploy
    images         noyau et archives (root-fs) produits
    ipk            paquets IPK
                                       $ ls -1 linux-raspberrypi
    licenses                           COPYING
    rpm            paquets RPM         generic_GPLv2




                           Yocto / OpenEmbedded                     17
Répertoires produits, suite


●   Le répertoire tmp/work fournit d'autres informations :
        –   Contenu du root-filesystem
        –   Liste des paquets installés
        –   Traces de construction
    $ ls -1 work/raspberrypi-poky-linux-gnueabi/rpi-
    basic-image/1.0-r0/
    image-version-info bin
    installed_pkgs.txt boot
                        dev
    ...                 etc log.do_populate_lic
                        ... log.do_populate_lic.13363
    rootfs              var log.do_rootfs
    temp                    log.do_rootfs.13927
                                     log.do_rootfs.16374
                                     ...


                           Yocto / OpenEmbedded                  18
Ajustement de la configuration
●   La configuration peut être ajustée à plusieurs niveaux :
         –   Configuration locale conf/local.conf
         –   Recettes (.bb)
●   Modification local.conf pour utiliser IPK
             PACKAGE_CLASSES ?= "package_ipk"
●   Ajout de « features » → x11, tools-debug, nfs-server, ...
           IMAGE_FEATURES (dans la recette)
             EXTRA_IMAGE_FEATURES (dans local.conf)
    IMAGE_FEATURES += "ssh-server-dropbear splash"
●   Suppression des répertoires de construction (work) !!
    INHERIT += "rm_work"




                              Yocto / OpenEmbedded              19
Ajustement de la configuration, suite


●   Par défaut la base RPM/IPK/DEB n'est pas disponible
    sur l'image, voir core-image-minimal.bb
    # remove not needed ipkg informations
    ROOTFS_POSTPROCESS_COMMAND += "remove_packaging_data_files ; "
●   On ne peut donc pas ajouter/supprimer des paquets
         –   Commenter la ligne précédente
         –   Ajouter à la configuration de la cible la ligne :
    {EXTRA_}IMAGE_FEATURES += "package-management"
●   La distribution RPM est deux fois plus volumineuse que
    la version IPK !
    Filesystem       Size        Used           Available Use% Mounted on
    /dev/root        290.5M      125.3M         150.2M   45%   /

    /dev/root        290.5M      53.5M          222.0M   19%   /


                               Yocto / OpenEmbedded                         20
Création du SDK

●   On peut créer la chaîne croisée et produire un script
    d'installation automatique
    $ bitbake meta-toolchain
●   On installe le SDK par :
    $ ./tmp/deploy/sdk/poky-eglibc-x86_64-arm-toolchain-1.3+snapshot-
    20130212.sh
    ...
    Extracting SDK...done
    Setting it up...done
    SDK has been successfully set up and is ready to be used.
●   Accès au SDK par :
    $ source <path>/environment-setup-armv6-vfp-poky-linux-gnueabi
    $ arm-poky-linux-gnueabi-gcc -v
    ...
    Thread model: posix
    gcc version 4.7.2 (GCC)


                               Yocto / OpenEmbedded                     21
Exemple de recette (simple)
●   L'exemple est un paquet « Hello World » basé sur un
    Makefile générique (ni Autotools, ni CMake)
●   Le fichier recette hello_1.0.bb est installé sur le
    répertoire meta-raspberry/recipes-core/hello
●   Les variables à définir sont :
        –   DESCRIPTION
        –   LICENSE
        –   LIC_FILES_CHKSUM
        –   PR        Package Release
        –   SRC_URI
        –   SRC_URI[md5sum]
        –   SRC_URI[sha256sum]


                          Yocto / OpenEmbedded              22
Exemple de recette, suite

DESCRIPTION = "Helloworld software"
LICENSE = "GPLv2"
LIC_FILES_CHKSUM =
"file://COPYING;md5=8ca43cbc842c2336e835926c2166c28b"
PR = "r0"


SRC_URI = "http://pficheux.free.fr/tmp/hello-1.0.tar.gz"


do_install() {
        oe_runmake install DESTDIR=${D}
}


SRC_URI[md5sum] = "b8fd6dac37f15cd475368ed7e23beb3b"
SRC_URI[sha256sum] =
"1fb572c6e6958856b491e4b478732e66268dc957562f4d80368d60c247
aeabef"



                      Yocto / OpenEmbedded                    23
Exemple de recette, suite


●   L'archive des sources contient les fichiers suivants :
           COPYING
           hello_oe.c
           Makefile
●   Le Makefile doit contenir un but install utilisant la
    variable DESTDIR :
           install:
              mkdir -p $(DESTDIR)/usr/bin
              cp hello_oe $(DESTDIR)/usr/bin
●   Construction du paquet par :
           $ bitbake hello



                          Yocto / OpenEmbedded                 24
Cas du paquet RPM

●   L'archive .tar.gz est chargée sur le répertoire
    downloads lors du fetch
●   La compilation s'effectue sur :
    tmp/work/armv6-vfp-poky-linux-gnueabi/hello
●   Affichage du contenu du paquet
    $ rpm -qpl tmp/deploy/rpm/armv6_vfp/hello-1.0-
    r0.armv6_vfp.rpm
    /usr
    /usr/bin
    /usr/bin/hello_oe
●   On peut installer le paquet par la commande :
    # rpm -ivh <path>/hello_1.0-r0_armv6-vfp.rpm




                          Yocto / OpenEmbedded                  25
Cas du paquet IPK
●   Affichage du contenu du paquet
    $ dpkg -c tmp/deploy/ipk/armv6-vfp/hello_1.0-r0_armv6-vfp.ipk
    drwxr-xr-x 0/0                0 2013-02-11 16:56 ./
    drwxr-xr-x 0/0                0 2013-02-11 16:56 ./usr/
    drwxr-xr-x 0/0                0 2013-02-11 16:56 ./usr/bin/
    -rwxr-xr-x 0/0           2952 2013-02-11 16:56 ./usr/bin/hello_oe
●   On installe le paquet par la commande :
    # opkg install <path>/hello_1.0-r0_armv6-vfp.ipk




                             Yocto / OpenEmbedded                       26
Options utiles

●   Pour exécuter uniquement une étape (clean, fetch, ...)
    $ bitbake -c <étape> <recette>
●   Exemples :                   Téléchargement archive

    $ bitbake -c fetch hello Idem + dépendances
    $ bitbake -c fetchall core-image-minimal
    $ bitbake -c listtasks hello
                                            Tâches à exécuter

●   Reconstruction d'un paquet
    $ bitbake -c cleansstate hello
    $ bitbake hello               Effacement du cache




                          Yocto / OpenEmbedded                              27
Conclusions


●   Yocto/OpenEmbedded est un outil puissant mais
    complexe
●   La distribution produite est plus lourde que dans le cas
    de Buildroot
●   Niveau de complexité (taille) sur la RPi
         –   Raspian (Go)
         –   Poky (100 Mo si RPM, 50 Mo si IPK)
         –   Buildroot (20 Mo)
●   On utilise Poky lorsque l'on veut une distribution
    évoluée et non un firmware !
●   Voir les démos sur la RPi


                            Yocto / OpenEmbedded               28
Bibliographie


●   http://www.openembedded.org
●   https://www.yoctoproject.org
●   http://www.yoctoproject.org/docs/1.3/poky-ref-manual/poky-ref-
    manual.html
●   http://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/meta/classes/core-
    image.bbclass
●   http://www.linuxfoundation.org/news-
    media/announcements/2010/12/linux-foundation-appoints-new-fellow
●   Chapitres 11 et 15 de l'ouvrage Linux embarqué, 4ème édition sur
    http://www.editions-eyrolles.com/Livre/9782212134827/linux-embarque
●   Démonstration OE sur carte Eukréa sur http://www.youtube.com/watch?
    v=5VPB8LeCloM
●   http://www.linuxembedded.fr/2011/08/ajouter-un-package-dans-
    openembedded-en-5-minutes



                              Yocto / OpenEmbedded                           29

Mais conteúdo relacionado

Mais procurados

Séminaire Captronic Yocto 24 février 2015
Séminaire Captronic Yocto 24 février 2015Séminaire Captronic Yocto 24 février 2015
Séminaire Captronic Yocto 24 février 2015Christian Charreyre
 
Embarquer Linux et des systèmes libres, méthodes et apports
Embarquer Linux et des systèmes libres, méthodes et apportsEmbarquer Linux et des systèmes libres, méthodes et apports
Embarquer Linux et des systèmes libres, méthodes et apportsguest3be047
 
NetBSD operating system: Clean Code, Ports, Anykernel, pkgsrc and Desktop pro...
NetBSD operating system: Clean Code, Ports, Anykernel, pkgsrc and Desktop pro...NetBSD operating system: Clean Code, Ports, Anykernel, pkgsrc and Desktop pro...
NetBSD operating system: Clean Code, Ports, Anykernel, pkgsrc and Desktop pro...jihbed
 
Gestion des dépendances dans un projet PHP - Forum PHP 2012
Gestion des dépendances dans un projet PHP - Forum PHP 2012Gestion des dépendances dans un projet PHP - Forum PHP 2012
Gestion des dépendances dans un projet PHP - Forum PHP 2012Jean-Marc Fontaine
 
Barre pour développeur Firefox et Eclipse
Barre pour développeur Firefox et EclipseBarre pour développeur Firefox et Eclipse
Barre pour développeur Firefox et EclipseYannick Pavard
 
Conference Informatique Embarquée Synergie-NTIC
Conference Informatique Embarquée Synergie-NTICConference Informatique Embarquée Synergie-NTIC
Conference Informatique Embarquée Synergie-NTICChristian Charreyre
 
Open Recipes - Pouquoi le packaging est important pour l'intégration logicielle
Open Recipes - Pouquoi le packaging est important pour l'intégration logicielleOpen Recipes - Pouquoi le packaging est important pour l'intégration logicielle
Open Recipes - Pouquoi le packaging est important pour l'intégration logicielleAnne Nicolas
 
Créer sa distribution Linux embarqué avec Yocto ou Angström
Créer sa distribution Linux embarqué avec Yocto ou AngströmCréer sa distribution Linux embarqué avec Yocto ou Angström
Créer sa distribution Linux embarqué avec Yocto ou AngströmChristian Charreyre
 
Linux et le temps réel - Meetup du 15 octobre 2015
Linux et le temps réel - Meetup du 15 octobre 2015Linux et le temps réel - Meetup du 15 octobre 2015
Linux et le temps réel - Meetup du 15 octobre 2015Christian Charreyre
 
Open Wide : Les interfaces graphiques dans l'embarque
Open Wide : Les interfaces graphiques dans l'embarqueOpen Wide : Les interfaces graphiques dans l'embarque
Open Wide : Les interfaces graphiques dans l'embarqueAlexandre LAHAYE
 
Programmation de systèmes embarqués : BeagleBone Black et Linux embarqué
Programmation de systèmes embarqués : BeagleBone Black et Linux embarquéProgrammation de systèmes embarqués : BeagleBone Black et Linux embarqué
Programmation de systèmes embarqués : BeagleBone Black et Linux embarquéECAM Brussels Engineering School
 
Créer une distribution Linux embarqué professionnelle avec Yocto Project
Créer une distribution Linux embarqué professionnelle avec Yocto ProjectCréer une distribution Linux embarqué professionnelle avec Yocto Project
Créer une distribution Linux embarqué professionnelle avec Yocto ProjectChristian Charreyre
 
Présentation Yocto - SophiaConf 2015
Présentation Yocto - SophiaConf 2015Présentation Yocto - SophiaConf 2015
Présentation Yocto - SophiaConf 2015Christian Charreyre
 
Présentation de la pile réseau sous gnu linux
Présentation de la pile réseau sous gnu linuxPrésentation de la pile réseau sous gnu linux
Présentation de la pile réseau sous gnu linuxThierry Gayet
 
Open Embedded un framework libre pour assurer la cohérence de son projet
Open Embedded un framework libre pour assurer la cohérence de son projetOpen Embedded un framework libre pour assurer la cohérence de son projet
Open Embedded un framework libre pour assurer la cohérence de son projetChristian Charreyre
 
Yocto une solution robuste pour construire des applications à fort contenu ap...
Yocto une solution robuste pour construire des applications à fort contenu ap...Yocto une solution robuste pour construire des applications à fort contenu ap...
Yocto une solution robuste pour construire des applications à fort contenu ap...Christian Charreyre
 
DEBUTER SOUS LINUX : GUIDE COMPLET
DEBUTER SOUS LINUX : GUIDE COMPLETDEBUTER SOUS LINUX : GUIDE COMPLET
DEBUTER SOUS LINUX : GUIDE COMPLETTaoufik AIT HSAIN
 
Virtualiastion des systèmes d'exploitations
Virtualiastion des systèmes d'exploitationsVirtualiastion des systèmes d'exploitations
Virtualiastion des systèmes d'exploitationsSGHIOUAR abdelfettah
 
Solutions temps réel sous linux
Solutions temps réel sous linuxSolutions temps réel sous linux
Solutions temps réel sous linuxembedded-linux-bdx
 

Mais procurados (20)

Séminaire Captronic Yocto 24 février 2015
Séminaire Captronic Yocto 24 février 2015Séminaire Captronic Yocto 24 février 2015
Séminaire Captronic Yocto 24 février 2015
 
Embarquer Linux et des systèmes libres, méthodes et apports
Embarquer Linux et des systèmes libres, méthodes et apportsEmbarquer Linux et des systèmes libres, méthodes et apports
Embarquer Linux et des systèmes libres, méthodes et apports
 
NetBSD operating system: Clean Code, Ports, Anykernel, pkgsrc and Desktop pro...
NetBSD operating system: Clean Code, Ports, Anykernel, pkgsrc and Desktop pro...NetBSD operating system: Clean Code, Ports, Anykernel, pkgsrc and Desktop pro...
NetBSD operating system: Clean Code, Ports, Anykernel, pkgsrc and Desktop pro...
 
Gestion des dépendances dans un projet PHP - Forum PHP 2012
Gestion des dépendances dans un projet PHP - Forum PHP 2012Gestion des dépendances dans un projet PHP - Forum PHP 2012
Gestion des dépendances dans un projet PHP - Forum PHP 2012
 
Barre pour développeur Firefox et Eclipse
Barre pour développeur Firefox et EclipseBarre pour développeur Firefox et Eclipse
Barre pour développeur Firefox et Eclipse
 
Conference Informatique Embarquée Synergie-NTIC
Conference Informatique Embarquée Synergie-NTICConference Informatique Embarquée Synergie-NTIC
Conference Informatique Embarquée Synergie-NTIC
 
Open Recipes - Pouquoi le packaging est important pour l'intégration logicielle
Open Recipes - Pouquoi le packaging est important pour l'intégration logicielleOpen Recipes - Pouquoi le packaging est important pour l'intégration logicielle
Open Recipes - Pouquoi le packaging est important pour l'intégration logicielle
 
OS libres pour l'IoT - Zephyr
OS libres pour l'IoT - ZephyrOS libres pour l'IoT - Zephyr
OS libres pour l'IoT - Zephyr
 
Créer sa distribution Linux embarqué avec Yocto ou Angström
Créer sa distribution Linux embarqué avec Yocto ou AngströmCréer sa distribution Linux embarqué avec Yocto ou Angström
Créer sa distribution Linux embarqué avec Yocto ou Angström
 
Linux et le temps réel - Meetup du 15 octobre 2015
Linux et le temps réel - Meetup du 15 octobre 2015Linux et le temps réel - Meetup du 15 octobre 2015
Linux et le temps réel - Meetup du 15 octobre 2015
 
Open Wide : Les interfaces graphiques dans l'embarque
Open Wide : Les interfaces graphiques dans l'embarqueOpen Wide : Les interfaces graphiques dans l'embarque
Open Wide : Les interfaces graphiques dans l'embarque
 
Programmation de systèmes embarqués : BeagleBone Black et Linux embarqué
Programmation de systèmes embarqués : BeagleBone Black et Linux embarquéProgrammation de systèmes embarqués : BeagleBone Black et Linux embarqué
Programmation de systèmes embarqués : BeagleBone Black et Linux embarqué
 
Créer une distribution Linux embarqué professionnelle avec Yocto Project
Créer une distribution Linux embarqué professionnelle avec Yocto ProjectCréer une distribution Linux embarqué professionnelle avec Yocto Project
Créer une distribution Linux embarqué professionnelle avec Yocto Project
 
Présentation Yocto - SophiaConf 2015
Présentation Yocto - SophiaConf 2015Présentation Yocto - SophiaConf 2015
Présentation Yocto - SophiaConf 2015
 
Présentation de la pile réseau sous gnu linux
Présentation de la pile réseau sous gnu linuxPrésentation de la pile réseau sous gnu linux
Présentation de la pile réseau sous gnu linux
 
Open Embedded un framework libre pour assurer la cohérence de son projet
Open Embedded un framework libre pour assurer la cohérence de son projetOpen Embedded un framework libre pour assurer la cohérence de son projet
Open Embedded un framework libre pour assurer la cohérence de son projet
 
Yocto une solution robuste pour construire des applications à fort contenu ap...
Yocto une solution robuste pour construire des applications à fort contenu ap...Yocto une solution robuste pour construire des applications à fort contenu ap...
Yocto une solution robuste pour construire des applications à fort contenu ap...
 
DEBUTER SOUS LINUX : GUIDE COMPLET
DEBUTER SOUS LINUX : GUIDE COMPLETDEBUTER SOUS LINUX : GUIDE COMPLET
DEBUTER SOUS LINUX : GUIDE COMPLET
 
Virtualiastion des systèmes d'exploitations
Virtualiastion des systèmes d'exploitationsVirtualiastion des systèmes d'exploitations
Virtualiastion des systèmes d'exploitations
 
Solutions temps réel sous linux
Solutions temps réel sous linuxSolutions temps réel sous linux
Solutions temps réel sous linux
 

Semelhante a Distro Recipes 2013 : Yocto / OpenEmbedded

Exposé open embedded
Exposé open embeddedExposé open embedded
Exposé open embeddedAyoub Rouzi
 
Rapport openembedded
Rapport openembeddedRapport openembedded
Rapport openembeddedAyoub Rouzi
 
De la chaîne de production au SI géré par des logiciels
De la chaîne de production au SI géré par des logicielsDe la chaîne de production au SI géré par des logiciels
De la chaîne de production au SI géré par des logicielsJohan Moreau
 
PHP Composer : Pourquoi ? Comment ? Et plus ...
PHP Composer : Pourquoi ? Comment ? Et plus ...PHP Composer : Pourquoi ? Comment ? Et plus ...
PHP Composer : Pourquoi ? Comment ? Et plus ...Romain Cambien
 
Formation GIT gratuite par ippon 2014
Formation GIT gratuite par ippon 2014Formation GIT gratuite par ippon 2014
Formation GIT gratuite par ippon 2014Ippon
 
Outils de construction pour la recherche
Outils de construction pour la rechercheOutils de construction pour la recherche
Outils de construction pour la rechercheJohan Moreau
 
découverte du langage python dans tous ses aspects
découverte du langage python dans tous ses aspectsdécouverte du langage python dans tous ses aspects
découverte du langage python dans tous ses aspectsThierry Gayet
 
AlterWay SolutionsLinux Outils Industrialisation PHP
AlterWay SolutionsLinux Outils Industrialisation PHPAlterWay SolutionsLinux Outils Industrialisation PHP
AlterWay SolutionsLinux Outils Industrialisation PHPjulien pauli
 
Python et son intégration avec Odoo
Python et son intégration avec OdooPython et son intégration avec Odoo
Python et son intégration avec OdooHassan WAHSISS
 
Spring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsSpring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsJulien Wittouck
 
Audit openERP 7.0: Mise en place &Optimisation de Performances
Audit openERP 7.0: Mise en place &Optimisation de Performances Audit openERP 7.0: Mise en place &Optimisation de Performances
Audit openERP 7.0: Mise en place &Optimisation de Performances Firas Kouẞàa
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinLudovic Piot
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide
 
CodeBuilder_DevOpsCenter.pptx
CodeBuilder_DevOpsCenter.pptxCodeBuilder_DevOpsCenter.pptx
CodeBuilder_DevOpsCenter.pptxThomasParaiso1
 
PréSentation Nuxeo Openadira
PréSentation Nuxeo   OpenadiraPréSentation Nuxeo   Openadira
PréSentation Nuxeo OpenadiraThierry CHABROL
 
Open Wide : les licences libres.
Open Wide : les licences libres. Open Wide : les licences libres.
Open Wide : les licences libres. Alexandre LAHAYE
 

Semelhante a Distro Recipes 2013 : Yocto / OpenEmbedded (20)

Prototypage IoT avec logiciel/matériel libre
Prototypage IoT avec logiciel/matériel librePrototypage IoT avec logiciel/matériel libre
Prototypage IoT avec logiciel/matériel libre
 
Exposé open embedded
Exposé open embeddedExposé open embedded
Exposé open embedded
 
Rapport openembedded
Rapport openembeddedRapport openembedded
Rapport openembedded
 
De la chaîne de production au SI géré par des logiciels
De la chaîne de production au SI géré par des logicielsDe la chaîne de production au SI géré par des logiciels
De la chaîne de production au SI géré par des logiciels
 
Plateformes embarquées
Plateformes embarquéesPlateformes embarquées
Plateformes embarquées
 
PHP Composer : Pourquoi ? Comment ? Et plus ...
PHP Composer : Pourquoi ? Comment ? Et plus ...PHP Composer : Pourquoi ? Comment ? Et plus ...
PHP Composer : Pourquoi ? Comment ? Et plus ...
 
Docker@linuq
Docker@linuqDocker@linuq
Docker@linuq
 
Formation GIT gratuite par ippon 2014
Formation GIT gratuite par ippon 2014Formation GIT gratuite par ippon 2014
Formation GIT gratuite par ippon 2014
 
Outils de construction pour la recherche
Outils de construction pour la rechercheOutils de construction pour la recherche
Outils de construction pour la recherche
 
découverte du langage python dans tous ses aspects
découverte du langage python dans tous ses aspectsdécouverte du langage python dans tous ses aspects
découverte du langage python dans tous ses aspects
 
AlterWay SolutionsLinux Outils Industrialisation PHP
AlterWay SolutionsLinux Outils Industrialisation PHPAlterWay SolutionsLinux Outils Industrialisation PHP
AlterWay SolutionsLinux Outils Industrialisation PHP
 
Python et son intégration avec Odoo
Python et son intégration avec OdooPython et son intégration avec Odoo
Python et son intégration avec Odoo
 
Spring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsSpring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'ts
 
Android pour l'industrie
Android pour l'industrieAndroid pour l'industrie
Android pour l'industrie
 
Audit openERP 7.0: Mise en place &Optimisation de Performances
Audit openERP 7.0: Mise en place &Optimisation de Performances Audit openERP 7.0: Mise en place &Optimisation de Performances
Audit openERP 7.0: Mise en place &Optimisation de Performances
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
 
CodeBuilder_DevOpsCenter.pptx
CodeBuilder_DevOpsCenter.pptxCodeBuilder_DevOpsCenter.pptx
CodeBuilder_DevOpsCenter.pptx
 
PréSentation Nuxeo Openadira
PréSentation Nuxeo   OpenadiraPréSentation Nuxeo   Openadira
PréSentation Nuxeo Openadira
 
Open Wide : les licences libres.
Open Wide : les licences libres. Open Wide : les licences libres.
Open Wide : les licences libres.
 

Mais de Anne Nicolas

Kernel Recipes 2019 - Driving the industry toward upstream first
Kernel Recipes 2019 - Driving the industry toward upstream firstKernel Recipes 2019 - Driving the industry toward upstream first
Kernel Recipes 2019 - Driving the industry toward upstream firstAnne Nicolas
 
Kernel Recipes 2019 - No NMI? No Problem! – Implementing Arm64 Pseudo-NMI
Kernel Recipes 2019 - No NMI? No Problem! – Implementing Arm64 Pseudo-NMIKernel Recipes 2019 - No NMI? No Problem! – Implementing Arm64 Pseudo-NMI
Kernel Recipes 2019 - No NMI? No Problem! – Implementing Arm64 Pseudo-NMIAnne Nicolas
 
Kernel Recipes 2019 - Hunting and fixing bugs all over the Linux kernel
Kernel Recipes 2019 - Hunting and fixing bugs all over the Linux kernelKernel Recipes 2019 - Hunting and fixing bugs all over the Linux kernel
Kernel Recipes 2019 - Hunting and fixing bugs all over the Linux kernelAnne Nicolas
 
Kernel Recipes 2019 - Metrics are money
Kernel Recipes 2019 - Metrics are moneyKernel Recipes 2019 - Metrics are money
Kernel Recipes 2019 - Metrics are moneyAnne Nicolas
 
Kernel Recipes 2019 - Kernel documentation: past, present, and future
Kernel Recipes 2019 - Kernel documentation: past, present, and futureKernel Recipes 2019 - Kernel documentation: past, present, and future
Kernel Recipes 2019 - Kernel documentation: past, present, and futureAnne Nicolas
 
Embedded Recipes 2019 - Knowing your ARM from your ARSE: wading through the t...
Embedded Recipes 2019 - Knowing your ARM from your ARSE: wading through the t...Embedded Recipes 2019 - Knowing your ARM from your ARSE: wading through the t...
Embedded Recipes 2019 - Knowing your ARM from your ARSE: wading through the t...Anne Nicolas
 
Kernel Recipes 2019 - GNU poke, an extensible editor for structured binary data
Kernel Recipes 2019 - GNU poke, an extensible editor for structured binary dataKernel Recipes 2019 - GNU poke, an extensible editor for structured binary data
Kernel Recipes 2019 - GNU poke, an extensible editor for structured binary dataAnne Nicolas
 
Kernel Recipes 2019 - Analyzing changes to the binary interface exposed by th...
Kernel Recipes 2019 - Analyzing changes to the binary interface exposed by th...Kernel Recipes 2019 - Analyzing changes to the binary interface exposed by th...
Kernel Recipes 2019 - Analyzing changes to the binary interface exposed by th...Anne Nicolas
 
Embedded Recipes 2019 - Remote update adventures with RAUC, Yocto and Barebox
Embedded Recipes 2019 - Remote update adventures with RAUC, Yocto and BareboxEmbedded Recipes 2019 - Remote update adventures with RAUC, Yocto and Barebox
Embedded Recipes 2019 - Remote update adventures with RAUC, Yocto and BareboxAnne Nicolas
 
Embedded Recipes 2019 - Making embedded graphics less special
Embedded Recipes 2019 - Making embedded graphics less specialEmbedded Recipes 2019 - Making embedded graphics less special
Embedded Recipes 2019 - Making embedded graphics less specialAnne Nicolas
 
Embedded Recipes 2019 - Linux on Open Source Hardware and Libre Silicon
Embedded Recipes 2019 - Linux on Open Source Hardware and Libre SiliconEmbedded Recipes 2019 - Linux on Open Source Hardware and Libre Silicon
Embedded Recipes 2019 - Linux on Open Source Hardware and Libre SiliconAnne Nicolas
 
Embedded Recipes 2019 - From maintaining I2C to the big (embedded) picture
Embedded Recipes 2019 - From maintaining I2C to the big (embedded) pictureEmbedded Recipes 2019 - From maintaining I2C to the big (embedded) picture
Embedded Recipes 2019 - From maintaining I2C to the big (embedded) pictureAnne Nicolas
 
Embedded Recipes 2019 - Testing firmware the devops way
Embedded Recipes 2019 - Testing firmware the devops wayEmbedded Recipes 2019 - Testing firmware the devops way
Embedded Recipes 2019 - Testing firmware the devops wayAnne Nicolas
 
Embedded Recipes 2019 - Herd your socs become a matchmaker
Embedded Recipes 2019 - Herd your socs become a matchmakerEmbedded Recipes 2019 - Herd your socs become a matchmaker
Embedded Recipes 2019 - Herd your socs become a matchmakerAnne Nicolas
 
Embedded Recipes 2019 - LLVM / Clang integration
Embedded Recipes 2019 - LLVM / Clang integrationEmbedded Recipes 2019 - LLVM / Clang integration
Embedded Recipes 2019 - LLVM / Clang integrationAnne Nicolas
 
Embedded Recipes 2019 - Introduction to JTAG debugging
Embedded Recipes 2019 - Introduction to JTAG debuggingEmbedded Recipes 2019 - Introduction to JTAG debugging
Embedded Recipes 2019 - Introduction to JTAG debuggingAnne Nicolas
 
Embedded Recipes 2019 - Pipewire a new foundation for embedded multimedia
Embedded Recipes 2019 - Pipewire a new foundation for embedded multimediaEmbedded Recipes 2019 - Pipewire a new foundation for embedded multimedia
Embedded Recipes 2019 - Pipewire a new foundation for embedded multimediaAnne Nicolas
 
Kernel Recipes 2019 - ftrace: Where modifying a running kernel all started
Kernel Recipes 2019 - ftrace: Where modifying a running kernel all startedKernel Recipes 2019 - ftrace: Where modifying a running kernel all started
Kernel Recipes 2019 - ftrace: Where modifying a running kernel all startedAnne Nicolas
 
Kernel Recipes 2019 - Suricata and XDP
Kernel Recipes 2019 - Suricata and XDPKernel Recipes 2019 - Suricata and XDP
Kernel Recipes 2019 - Suricata and XDPAnne Nicolas
 
Kernel Recipes 2019 - Marvels of Memory Auto-configuration (SPD)
Kernel Recipes 2019 - Marvels of Memory Auto-configuration (SPD)Kernel Recipes 2019 - Marvels of Memory Auto-configuration (SPD)
Kernel Recipes 2019 - Marvels of Memory Auto-configuration (SPD)Anne Nicolas
 

Mais de Anne Nicolas (20)

Kernel Recipes 2019 - Driving the industry toward upstream first
Kernel Recipes 2019 - Driving the industry toward upstream firstKernel Recipes 2019 - Driving the industry toward upstream first
Kernel Recipes 2019 - Driving the industry toward upstream first
 
Kernel Recipes 2019 - No NMI? No Problem! – Implementing Arm64 Pseudo-NMI
Kernel Recipes 2019 - No NMI? No Problem! – Implementing Arm64 Pseudo-NMIKernel Recipes 2019 - No NMI? No Problem! – Implementing Arm64 Pseudo-NMI
Kernel Recipes 2019 - No NMI? No Problem! – Implementing Arm64 Pseudo-NMI
 
Kernel Recipes 2019 - Hunting and fixing bugs all over the Linux kernel
Kernel Recipes 2019 - Hunting and fixing bugs all over the Linux kernelKernel Recipes 2019 - Hunting and fixing bugs all over the Linux kernel
Kernel Recipes 2019 - Hunting and fixing bugs all over the Linux kernel
 
Kernel Recipes 2019 - Metrics are money
Kernel Recipes 2019 - Metrics are moneyKernel Recipes 2019 - Metrics are money
Kernel Recipes 2019 - Metrics are money
 
Kernel Recipes 2019 - Kernel documentation: past, present, and future
Kernel Recipes 2019 - Kernel documentation: past, present, and futureKernel Recipes 2019 - Kernel documentation: past, present, and future
Kernel Recipes 2019 - Kernel documentation: past, present, and future
 
Embedded Recipes 2019 - Knowing your ARM from your ARSE: wading through the t...
Embedded Recipes 2019 - Knowing your ARM from your ARSE: wading through the t...Embedded Recipes 2019 - Knowing your ARM from your ARSE: wading through the t...
Embedded Recipes 2019 - Knowing your ARM from your ARSE: wading through the t...
 
Kernel Recipes 2019 - GNU poke, an extensible editor for structured binary data
Kernel Recipes 2019 - GNU poke, an extensible editor for structured binary dataKernel Recipes 2019 - GNU poke, an extensible editor for structured binary data
Kernel Recipes 2019 - GNU poke, an extensible editor for structured binary data
 
Kernel Recipes 2019 - Analyzing changes to the binary interface exposed by th...
Kernel Recipes 2019 - Analyzing changes to the binary interface exposed by th...Kernel Recipes 2019 - Analyzing changes to the binary interface exposed by th...
Kernel Recipes 2019 - Analyzing changes to the binary interface exposed by th...
 
Embedded Recipes 2019 - Remote update adventures with RAUC, Yocto and Barebox
Embedded Recipes 2019 - Remote update adventures with RAUC, Yocto and BareboxEmbedded Recipes 2019 - Remote update adventures with RAUC, Yocto and Barebox
Embedded Recipes 2019 - Remote update adventures with RAUC, Yocto and Barebox
 
Embedded Recipes 2019 - Making embedded graphics less special
Embedded Recipes 2019 - Making embedded graphics less specialEmbedded Recipes 2019 - Making embedded graphics less special
Embedded Recipes 2019 - Making embedded graphics less special
 
Embedded Recipes 2019 - Linux on Open Source Hardware and Libre Silicon
Embedded Recipes 2019 - Linux on Open Source Hardware and Libre SiliconEmbedded Recipes 2019 - Linux on Open Source Hardware and Libre Silicon
Embedded Recipes 2019 - Linux on Open Source Hardware and Libre Silicon
 
Embedded Recipes 2019 - From maintaining I2C to the big (embedded) picture
Embedded Recipes 2019 - From maintaining I2C to the big (embedded) pictureEmbedded Recipes 2019 - From maintaining I2C to the big (embedded) picture
Embedded Recipes 2019 - From maintaining I2C to the big (embedded) picture
 
Embedded Recipes 2019 - Testing firmware the devops way
Embedded Recipes 2019 - Testing firmware the devops wayEmbedded Recipes 2019 - Testing firmware the devops way
Embedded Recipes 2019 - Testing firmware the devops way
 
Embedded Recipes 2019 - Herd your socs become a matchmaker
Embedded Recipes 2019 - Herd your socs become a matchmakerEmbedded Recipes 2019 - Herd your socs become a matchmaker
Embedded Recipes 2019 - Herd your socs become a matchmaker
 
Embedded Recipes 2019 - LLVM / Clang integration
Embedded Recipes 2019 - LLVM / Clang integrationEmbedded Recipes 2019 - LLVM / Clang integration
Embedded Recipes 2019 - LLVM / Clang integration
 
Embedded Recipes 2019 - Introduction to JTAG debugging
Embedded Recipes 2019 - Introduction to JTAG debuggingEmbedded Recipes 2019 - Introduction to JTAG debugging
Embedded Recipes 2019 - Introduction to JTAG debugging
 
Embedded Recipes 2019 - Pipewire a new foundation for embedded multimedia
Embedded Recipes 2019 - Pipewire a new foundation for embedded multimediaEmbedded Recipes 2019 - Pipewire a new foundation for embedded multimedia
Embedded Recipes 2019 - Pipewire a new foundation for embedded multimedia
 
Kernel Recipes 2019 - ftrace: Where modifying a running kernel all started
Kernel Recipes 2019 - ftrace: Where modifying a running kernel all startedKernel Recipes 2019 - ftrace: Where modifying a running kernel all started
Kernel Recipes 2019 - ftrace: Where modifying a running kernel all started
 
Kernel Recipes 2019 - Suricata and XDP
Kernel Recipes 2019 - Suricata and XDPKernel Recipes 2019 - Suricata and XDP
Kernel Recipes 2019 - Suricata and XDP
 
Kernel Recipes 2019 - Marvels of Memory Auto-configuration (SPD)
Kernel Recipes 2019 - Marvels of Memory Auto-configuration (SPD)Kernel Recipes 2019 - Marvels of Memory Auto-configuration (SPD)
Kernel Recipes 2019 - Marvels of Memory Auto-configuration (SPD)
 

Distro Recipes 2013 : Yocto / OpenEmbedded

  • 1. Introduction à Yocto / OpenEmbedded Pierre Ficheux (pierre.ficheux@openwide.fr) Avril 2013 Yocto / OpenEmbedded 1
  • 2. Présentation Open Wide ● SSII/SSLL créée en septembre 2001 avec Thales et Schneider ● Indépendante depuis 2009 ● Environ 110 salariés sur Paris, Lyon et Toulouse (depuis janvier 2012) ● Industrialisation de composants open source ● Trois activités : – OW Système d'Information (Java/PHP) – OW Outsourcing: hébergement – OW Ingénierie: informatique industrielle Yocto / OpenEmbedded 2
  • 3. Présentation PF ● Utilisateur de logiciels libres depuis 1989 ● Utilisateur de Linux depuis 1992 ● Auteur des 4 éditions de l'ouvrage « Linux embarqué » (Eyrolles), 4ème édition parue en juin 2012 ● Auteur GNU Linux Magazine et Open Silicium ● CTO Open Wide Ingénierie, enseignant EPITA Yocto / OpenEmbedded 3
  • 4. Programme ● Créer une distribution embarquée ● Introduction à OpenEmbedded ● Yocto Project(s) ● Construction d'une distribution pour Raspberry Pi ● Exemple de recette simple (Hello World) ● Démonstration sur RPi Yocto / OpenEmbedded 4
  • 5. Créer une distribution « embarquée » ● Choisir un outil commercial (Wind River, Montavista) ● Utiliser un outil de génération : Buildroot, OpenEmbedded, OpenWrt, LTIB ● Adapter une distribution Linux classique – Souvent limité au niveau matériel – Empreinte mémoire et flash importante – Temps de démarrage ● Créer la distribution « from scratch » – Approche plutôt « pédagogique » – Difficile/impossible à industrialiser → dépendances, mise à jour Yocto / OpenEmbedded 5
  • 6. Les principaux outils disponibles ● OpenEmbedded – Moteur écrit en Python (bitbake) – Puissant mais lourd – Basé sur des fichiers de configuration (?) ● Buildroot – Basé sur la commande make – Au départ un démonstrateur pour uClibc – Bon outil mais pas de gestion de paquets – Utilisé par Google Fiber project ● OpenWrt – Dérivé de BR + gère les paquets IPK – Orienté vers les IAD (Internet Access Device) ● Autres: LTIB (Freescale), PTXdist (Pengutronix) Yocto / OpenEmbedded 6
  • 7. OpenEmbedded, introduction ● OE est une « généralisation » de l'approche utilisée dans BR → framework de compilation croisée ● Démarrage en 2003 pour OpenZaurus ● Utilise un moteur écrit en Python (bitbake) et un ensemble de règles utilisant un principe d'héritage → recipe (recette = fichier .bb) ● Gère la notion de paquet binaire, contrairement à BR (IPK, RPM, DEB) ● Plusieurs milliers de paquets disponibles ● Par contre : – Peu d'interfaces de configuration (en cours) – Processus de compilation plus lourd qu'avec BR ● Très utilisé dans l'industrie (Yocto Project) Yocto / OpenEmbedded 7
  • 8. Yocto Project(s) ● Le projet « chapeau » le plus important autour de OE (Poky, Eglibc, Hob, Matchbox, infrastructures de test, QA, …) ● Contributions Intel, Wind River, Montavista, Mentor Graphics, … (20 participants officiels) ● Architecte : Richard Purdie → rejoint la Linux Foundation en tant que « fellow » en décembre 2010 ● Organisation similaire à celle de l'équipe du noyau Linux « meritocracy presided over by a benevolent dictator » ● Forte présence d'Intel mais l’engagement de la fondation Linux permet une collaboration fructueuse ;-) Yocto / OpenEmbedded 8
  • 9. Yocto Project(s), suite ● Utilisé par les éditeurs pour leurs produits commerciaux ● Utilisé par les fabricants de matériel pour les BSP (Board Support Package) ● Pas réellement une « distribution » mais fournit des templates et outils pour créer des distributions – Support matériel (meta-intel, meta-raspberrypi) – Portage de composants (meta-mono) – Distributions (meta-yocto, meta-angstrom) – Couches « métier » (meta-ivi) → GENIVI It's not an embedded Linux distribution – it creates a custom one for you ● Poky est le projet « distribution de référence » – Poky 8.0 (danny) succède Poky 7.0 (denzel) Poky 8.0 (Yocto Project 1.3 Reference Distro) Yocto / OpenEmbedded 9
  • 10. Quelques distributions ● Angstrom (meta-angstrom) – Distribution basée sur OE, fait partie du projet Yocto depuis 9/2012 – Approche binaire similaire aux distributions classiques ● Arago (meta-arago-distro) – Fournie par TI (OMAP) ● ELDK (meta-eldk) – Embedded Linux Development Kit, Denx Software ● De plus en plus d'acteurs du domaine se rapprochent de Yocto Project ! http://git.eukrea.fr Yocto / OpenEmbedded 10
  • 11. Métadonnées OE ● Les recettes (.bb) décrivent la manière de compiler un paquet (ou plusieurs) pour la cible $ bitbake ma_recette ● Un .bb peut décrire UN composant mais également une distribution complète ● Les classes (.bbclass) décrivent des règles communes aux recettes (comment traiter Autotools, CMake, …) ● Les fichiers de configuration (.conf), définissent les paramètres de la distribution cible (type de machine, nombre de processus en parallèle, …) ● Extrait de conf/local.conf BB_NUMBER_THREADS = "8" PARALLEL_MAKE = "-j 8" MACHINE ?= "raspberrypi" Yocto / OpenEmbedded 11
  • 12. Métadonnées OE ● Les recettes (.bb) décrivent la manière de compiler un paquet (ou plusieurs) pour la cible : $ bitbake ma_recette ● Un .bb peut décrire UN composant mais également une distribution complète ● Les classes (classes/*.bbclass) décrivent des règles communes aux recettes (autotools, cmake, module, ...) ● Les fichiers de configuration (.conf), définissent les paramètres de la distribution cible (poky.conf, local.conf, ...) ● Extrait de conf/local.conf BB_NUMBER_THREADS = "8" PARALLEL_MAKE = "-j 8" MACHINE ?= "raspberrypi" Yocto / OpenEmbedded 12
  • 13. Métadonnées OE, suite ● OE est rarement utilisé seul ● Il fournit les « métadonnées » principales (OE-Core) permettant de construire des distributions ● Les autres couches (layers) sont disponibles sur : http://layers.openembedded.org/layerindex ● OE fournit cependant des recettes pour des images de test simples (QEMU) $ cd meta/recipes-core/images/ $ ls -1 *.bb build-appliance-image.bb core-image-base.bb core-image-minimal.bb core-image-minimal-dev.bb core-image-minimal-initramfs.bb core-image-minimal-mtdutils.bb Yocto / OpenEmbedded 13
  • 14. Bitbake ● L’outil bitbake permet de créer un composant OE allant du simple paquet à une distribution complète : $ bitbake vim $ bitbake core-image-minimal $ bitbake rpi-basic-image ● Il parcourt les fichiers de configuration afin de déterminer quels sont les composants à construire en fonction des recettes ● L’outil est équivalent à make dans le cas de Buildroot ● Pour chaque paquet: fetch, unpack, patch, configure, compile, stage, install, package, ... Yocto / OpenEmbedded 14
  • 15. Installation Yocto/OE pour RPi ● Installation de Poky (Yocto reference distro) $ git clone git://git.yoctoproject.org/poky ● Installation de la couche RPi (meta-raspberrypi) $ cd poky $ git clone git://git.yoctoproject.org/meta-raspberrypi ● Création du répertoire de travail $ . ./oe-init-build-env rpi-build ● Ajout de la couche RPi à conf/bblayers.conf BBLAYERS ?= " ... <path>/poky/meta-raspberrypi " ● Ajout du type de machine à conf/local.conf MACHINE ?= "raspberrypi" Yocto / OpenEmbedded 15
  • 16. Production d'une image de test ● Les archives des paquets sont stockées dans rpi- build/downloads lors de l'étape fetch ● La couche RPi fournit une image de test dérivée de core-image-minimal $ ls -1 meta-raspberrypi/recipes-core/images/ rpi-basic-image.bb rpi-hwup-image.bb ● On produit l'image par : $ bitbake rpi-basic-image ● Par défaut, Poky utilise le format de paquet RPM (voir conf/local.conf) ● L'image de la SD est produite automatiquement ● Environ 50 mn sur un 16 CPU Xeon mais 12h sur un Core2 Duo... Yocto / OpenEmbedded 16
  • 17. Répertoires produits ● Le répertoire rpi-build/downloads contient les archives téléchargées (à partager !) ● Le répertoire rpi-build/tmp est utilisé comme « sortie » avec les sous-répertoires deploy et work $ ls -1 deploy images noyau et archives (root-fs) produits ipk paquets IPK $ ls -1 linux-raspberrypi licenses COPYING rpm paquets RPM generic_GPLv2 Yocto / OpenEmbedded 17
  • 18. Répertoires produits, suite ● Le répertoire tmp/work fournit d'autres informations : – Contenu du root-filesystem – Liste des paquets installés – Traces de construction $ ls -1 work/raspberrypi-poky-linux-gnueabi/rpi- basic-image/1.0-r0/ image-version-info bin installed_pkgs.txt boot dev ... etc log.do_populate_lic ... log.do_populate_lic.13363 rootfs var log.do_rootfs temp log.do_rootfs.13927 log.do_rootfs.16374 ... Yocto / OpenEmbedded 18
  • 19. Ajustement de la configuration ● La configuration peut être ajustée à plusieurs niveaux : – Configuration locale conf/local.conf – Recettes (.bb) ● Modification local.conf pour utiliser IPK PACKAGE_CLASSES ?= "package_ipk" ● Ajout de « features » → x11, tools-debug, nfs-server, ... IMAGE_FEATURES (dans la recette) EXTRA_IMAGE_FEATURES (dans local.conf) IMAGE_FEATURES += "ssh-server-dropbear splash" ● Suppression des répertoires de construction (work) !! INHERIT += "rm_work" Yocto / OpenEmbedded 19
  • 20. Ajustement de la configuration, suite ● Par défaut la base RPM/IPK/DEB n'est pas disponible sur l'image, voir core-image-minimal.bb # remove not needed ipkg informations ROOTFS_POSTPROCESS_COMMAND += "remove_packaging_data_files ; " ● On ne peut donc pas ajouter/supprimer des paquets – Commenter la ligne précédente – Ajouter à la configuration de la cible la ligne : {EXTRA_}IMAGE_FEATURES += "package-management" ● La distribution RPM est deux fois plus volumineuse que la version IPK ! Filesystem Size Used Available Use% Mounted on /dev/root 290.5M 125.3M 150.2M 45% / /dev/root 290.5M 53.5M 222.0M 19% / Yocto / OpenEmbedded 20
  • 21. Création du SDK ● On peut créer la chaîne croisée et produire un script d'installation automatique $ bitbake meta-toolchain ● On installe le SDK par : $ ./tmp/deploy/sdk/poky-eglibc-x86_64-arm-toolchain-1.3+snapshot- 20130212.sh ... Extracting SDK...done Setting it up...done SDK has been successfully set up and is ready to be used. ● Accès au SDK par : $ source <path>/environment-setup-armv6-vfp-poky-linux-gnueabi $ arm-poky-linux-gnueabi-gcc -v ... Thread model: posix gcc version 4.7.2 (GCC) Yocto / OpenEmbedded 21
  • 22. Exemple de recette (simple) ● L'exemple est un paquet « Hello World » basé sur un Makefile générique (ni Autotools, ni CMake) ● Le fichier recette hello_1.0.bb est installé sur le répertoire meta-raspberry/recipes-core/hello ● Les variables à définir sont : – DESCRIPTION – LICENSE – LIC_FILES_CHKSUM – PR Package Release – SRC_URI – SRC_URI[md5sum] – SRC_URI[sha256sum] Yocto / OpenEmbedded 22
  • 23. Exemple de recette, suite DESCRIPTION = "Helloworld software" LICENSE = "GPLv2" LIC_FILES_CHKSUM = "file://COPYING;md5=8ca43cbc842c2336e835926c2166c28b" PR = "r0" SRC_URI = "http://pficheux.free.fr/tmp/hello-1.0.tar.gz" do_install() { oe_runmake install DESTDIR=${D} } SRC_URI[md5sum] = "b8fd6dac37f15cd475368ed7e23beb3b" SRC_URI[sha256sum] = "1fb572c6e6958856b491e4b478732e66268dc957562f4d80368d60c247 aeabef" Yocto / OpenEmbedded 23
  • 24. Exemple de recette, suite ● L'archive des sources contient les fichiers suivants : COPYING hello_oe.c Makefile ● Le Makefile doit contenir un but install utilisant la variable DESTDIR : install: mkdir -p $(DESTDIR)/usr/bin cp hello_oe $(DESTDIR)/usr/bin ● Construction du paquet par : $ bitbake hello Yocto / OpenEmbedded 24
  • 25. Cas du paquet RPM ● L'archive .tar.gz est chargée sur le répertoire downloads lors du fetch ● La compilation s'effectue sur : tmp/work/armv6-vfp-poky-linux-gnueabi/hello ● Affichage du contenu du paquet $ rpm -qpl tmp/deploy/rpm/armv6_vfp/hello-1.0- r0.armv6_vfp.rpm /usr /usr/bin /usr/bin/hello_oe ● On peut installer le paquet par la commande : # rpm -ivh <path>/hello_1.0-r0_armv6-vfp.rpm Yocto / OpenEmbedded 25
  • 26. Cas du paquet IPK ● Affichage du contenu du paquet $ dpkg -c tmp/deploy/ipk/armv6-vfp/hello_1.0-r0_armv6-vfp.ipk drwxr-xr-x 0/0 0 2013-02-11 16:56 ./ drwxr-xr-x 0/0 0 2013-02-11 16:56 ./usr/ drwxr-xr-x 0/0 0 2013-02-11 16:56 ./usr/bin/ -rwxr-xr-x 0/0 2952 2013-02-11 16:56 ./usr/bin/hello_oe ● On installe le paquet par la commande : # opkg install <path>/hello_1.0-r0_armv6-vfp.ipk Yocto / OpenEmbedded 26
  • 27. Options utiles ● Pour exécuter uniquement une étape (clean, fetch, ...) $ bitbake -c <étape> <recette> ● Exemples : Téléchargement archive $ bitbake -c fetch hello Idem + dépendances $ bitbake -c fetchall core-image-minimal $ bitbake -c listtasks hello Tâches à exécuter ● Reconstruction d'un paquet $ bitbake -c cleansstate hello $ bitbake hello Effacement du cache Yocto / OpenEmbedded 27
  • 28. Conclusions ● Yocto/OpenEmbedded est un outil puissant mais complexe ● La distribution produite est plus lourde que dans le cas de Buildroot ● Niveau de complexité (taille) sur la RPi – Raspian (Go) – Poky (100 Mo si RPM, 50 Mo si IPK) – Buildroot (20 Mo) ● On utilise Poky lorsque l'on veut une distribution évoluée et non un firmware ! ● Voir les démos sur la RPi Yocto / OpenEmbedded 28
  • 29. Bibliographie ● http://www.openembedded.org ● https://www.yoctoproject.org ● http://www.yoctoproject.org/docs/1.3/poky-ref-manual/poky-ref- manual.html ● http://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/meta/classes/core- image.bbclass ● http://www.linuxfoundation.org/news- media/announcements/2010/12/linux-foundation-appoints-new-fellow ● Chapitres 11 et 15 de l'ouvrage Linux embarqué, 4ème édition sur http://www.editions-eyrolles.com/Livre/9782212134827/linux-embarque ● Démonstration OE sur carte Eukréa sur http://www.youtube.com/watch? v=5VPB8LeCloM ● http://www.linuxembedded.fr/2011/08/ajouter-un-package-dans- openembedded-en-5-minutes Yocto / OpenEmbedded 29