Distro Recipes 2013 : Yocto / OpenEmbedded

Anne Nicolas
Anne NicolasCo-founder and CEO um hupstream
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
1 von 29

Recomendados

Open Wide : Les outils pour le développement des systemes embarques von
Open Wide : Les outils pour le développement des systemes embarquesOpen Wide : Les outils pour le développement des systemes embarques
Open Wide : Les outils pour le développement des systemes embarquesAlexandre LAHAYE
2.6K views87 Folien
Concevoir un système Linux embarqué avec Yocto Project von
Concevoir un système Linux embarqué avec Yocto ProjectConcevoir un système Linux embarqué avec Yocto Project
Concevoir un système Linux embarqué avec Yocto ProjectChristian Charreyre
7.9K views60 Folien
Conférence Shinken à SophiaConf2012 (Jean Gabès) von
Conférence Shinken à SophiaConf2012 (Jean Gabès)Conférence Shinken à SophiaConf2012 (Jean Gabès)
Conférence Shinken à SophiaConf2012 (Jean Gabès)Jean Gabès
3.1K views108 Folien
Yocto oe von
Yocto oeYocto oe
Yocto oeAlexandre LAHAYE
1.3K views28 Folien
Concevoir un système Linux embarqué avec Yocto Project - Version révisée von
Concevoir un système Linux embarqué avec Yocto Project - Version réviséeConcevoir un système Linux embarqué avec Yocto Project - Version révisée
Concevoir un système Linux embarqué avec Yocto Project - Version réviséeChristian Charreyre
5.2K views62 Folien
Créer sa distribution Linux embarqué avec Yocto ou Angström von
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
475 views63 Folien

Más contenido relacionado

Was ist angesagt?

Séminaire Captronic Yocto 24 février 2015 von
Séminaire Captronic Yocto 24 février 2015Séminaire Captronic Yocto 24 février 2015
Séminaire Captronic Yocto 24 février 2015Christian Charreyre
2.3K views65 Folien
Embarquer Linux et des systèmes libres, méthodes et apports von
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
2.4K views28 Folien
NetBSD operating system: Clean Code, Ports, Anykernel, pkgsrc and Desktop pro... von
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
506 views41 Folien
Gestion des dépendances dans un projet PHP - Forum PHP 2012 von
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
6.9K views69 Folien
Barre pour développeur Firefox et Eclipse von
Barre pour développeur Firefox et EclipseBarre pour développeur Firefox et Eclipse
Barre pour développeur Firefox et EclipseYannick Pavard
3.5K views32 Folien
Conference Informatique Embarquée Synergie-NTIC von
Conference Informatique Embarquée Synergie-NTICConference Informatique Embarquée Synergie-NTIC
Conference Informatique Embarquée Synergie-NTICChristian Charreyre
1.5K views18 Folien

Was ist angesagt?(20)

Embarquer Linux et des systèmes libres, méthodes et apports von guest3be047
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
guest3be0472.4K views
NetBSD operating system: Clean Code, Ports, Anykernel, pkgsrc and Desktop pro... von jihbed
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...
jihbed506 views
Gestion des dépendances dans un projet PHP - Forum PHP 2012 von Jean-Marc Fontaine
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
Jean-Marc Fontaine6.9K views
Barre pour développeur Firefox et Eclipse von Yannick Pavard
Barre pour développeur Firefox et EclipseBarre pour développeur Firefox et Eclipse
Barre pour développeur Firefox et Eclipse
Yannick Pavard3.5K views
Conference Informatique Embarquée Synergie-NTIC von Christian Charreyre
Conference Informatique Embarquée Synergie-NTICConference Informatique Embarquée Synergie-NTIC
Conference Informatique Embarquée Synergie-NTIC
Christian Charreyre1.5K views
Open Recipes - Pouquoi le packaging est important pour l'intégration logicielle von Anne Nicolas
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
Anne Nicolas914 views
Créer sa distribution Linux embarqué avec Yocto ou Angström von Christian Charreyre
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
Christian Charreyre2.7K views
Open Wide : Les interfaces graphiques dans l'embarque von Alexandre LAHAYE
Open Wide : Les interfaces graphiques dans l'embarqueOpen Wide : Les interfaces graphiques dans l'embarque
Open Wide : Les interfaces graphiques dans l'embarque
Alexandre LAHAYE2.6K views
Créer une distribution Linux embarqué professionnelle avec Yocto Project von Christian Charreyre
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
Christian Charreyre2.5K views
Présentation de la pile réseau sous gnu linux von Thierry Gayet
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
Thierry Gayet375 views
Open Embedded un framework libre pour assurer la cohérence de son projet von Christian Charreyre
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
Christian Charreyre1.7K views
Yocto une solution robuste pour construire des applications à fort contenu ap... von Christian 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...

Similar a Distro Recipes 2013 : Yocto / OpenEmbedded

Prototypage IoT avec logiciel/matériel libre von
Prototypage IoT avec logiciel/matériel librePrototypage IoT avec logiciel/matériel libre
Prototypage IoT avec logiciel/matériel librePôle Systematic Paris-Region
601 views15 Folien
Exposé open embedded von
Exposé open embeddedExposé open embedded
Exposé open embeddedAyoub Rouzi
190 views42 Folien
Rapport openembedded von
Rapport openembeddedRapport openembedded
Rapport openembeddedAyoub Rouzi
149 views24 Folien
De la chaîne de production au SI géré par des logiciels von
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
662 views48 Folien
Plateformes embarquées von
Plateformes embarquéesPlateformes embarquées
Plateformes embarquéesAlexandre LAHAYE
893 views20 Folien
PHP Composer : Pourquoi ? Comment ? Et plus ... von
PHP Composer : Pourquoi ? Comment ? Et plus ...PHP Composer : Pourquoi ? Comment ? Et plus ...
PHP Composer : Pourquoi ? Comment ? Et plus ...Romain Cambien
3.1K views21 Folien

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

Exposé open embedded von Ayoub Rouzi
Exposé open embeddedExposé open embedded
Exposé open embedded
Ayoub Rouzi190 views
Rapport openembedded von Ayoub Rouzi
Rapport openembeddedRapport openembedded
Rapport openembedded
Ayoub Rouzi149 views
De la chaîne de production au SI géré par des logiciels von Johan Moreau
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
Johan Moreau662 views
PHP Composer : Pourquoi ? Comment ? Et plus ... von Romain Cambien
PHP Composer : Pourquoi ? Comment ? Et plus ...PHP Composer : Pourquoi ? Comment ? Et plus ...
PHP Composer : Pourquoi ? Comment ? Et plus ...
Romain Cambien3.1K views
Formation GIT gratuite par ippon 2014 von Ippon
Formation GIT gratuite par ippon 2014Formation GIT gratuite par ippon 2014
Formation GIT gratuite par ippon 2014
Ippon12.9K views
Outils de construction pour la recherche von Johan Moreau
Outils de construction pour la rechercheOutils de construction pour la recherche
Outils de construction pour la recherche
Johan Moreau573 views
AlterWay SolutionsLinux Outils Industrialisation PHP von julien pauli
AlterWay SolutionsLinux Outils Industrialisation PHPAlterWay SolutionsLinux Outils Industrialisation PHP
AlterWay SolutionsLinux Outils Industrialisation PHP
julien pauli1.4K views
Python et son intégration avec Odoo von Hassan WAHSISS
Python et son intégration avec OdooPython et son intégration avec Odoo
Python et son intégration avec Odoo
Hassan WAHSISS17.9K views
Spring Boot & Containers - Do's & Don'ts von Julien Wittouck
Spring Boot & Containers - Do's & Don'tsSpring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'ts
Julien Wittouck204 views
Audit openERP 7.0: Mise en place &Optimisation de Performances von Firas Kouẞàa
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ẞàa2.1K views
Oxalide Workshop #4 - Docker, des tours dans le petit bassin von Ludovic Piot
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
Ludovic Piot883 views
Oxalide Workshop #4 - Docker, des tours dans le petit bassin von Oxalide
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
Oxalide2.6K views

Más de Anne Nicolas

Kernel Recipes 2019 - Driving the industry toward upstream first von
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
2.4K views33 Folien
Kernel Recipes 2019 - No NMI? No Problem! – Implementing Arm64 Pseudo-NMI von
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
3.7K views44 Folien
Kernel Recipes 2019 - Hunting and fixing bugs all over the Linux kernel von
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
1.5K views120 Folien
Kernel Recipes 2019 - Metrics are money von
Kernel Recipes 2019 - Metrics are moneyKernel Recipes 2019 - Metrics are money
Kernel Recipes 2019 - Metrics are moneyAnne Nicolas
1.4K views51 Folien
Kernel Recipes 2019 - Kernel documentation: past, present, and future von
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
826 views63 Folien
Embedded Recipes 2019 - Knowing your ARM from your ARSE: wading through the t... von
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
781 views47 Folien

Más de Anne Nicolas(20)

Kernel Recipes 2019 - Driving the industry toward upstream first von Anne Nicolas
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
Anne Nicolas2.4K views
Kernel Recipes 2019 - No NMI? No Problem! – Implementing Arm64 Pseudo-NMI von Anne Nicolas
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
Anne Nicolas3.7K views
Kernel Recipes 2019 - Hunting and fixing bugs all over the Linux kernel von Anne Nicolas
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
Anne Nicolas1.5K views
Kernel Recipes 2019 - Metrics are money von Anne Nicolas
Kernel Recipes 2019 - Metrics are moneyKernel Recipes 2019 - Metrics are money
Kernel Recipes 2019 - Metrics are money
Anne Nicolas1.4K views
Kernel Recipes 2019 - Kernel documentation: past, present, and future von Anne Nicolas
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
Anne Nicolas826 views
Embedded Recipes 2019 - Knowing your ARM from your ARSE: wading through the t... von Anne 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...
Anne Nicolas781 views
Kernel Recipes 2019 - GNU poke, an extensible editor for structured binary data von Anne Nicolas
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
Anne Nicolas5.3K views
Kernel Recipes 2019 - Analyzing changes to the binary interface exposed by th... von Anne 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...
Anne Nicolas858 views
Embedded Recipes 2019 - Remote update adventures with RAUC, Yocto and Barebox von Anne Nicolas
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
Anne Nicolas1.1K views
Embedded Recipes 2019 - Making embedded graphics less special von Anne Nicolas
Embedded Recipes 2019 - Making embedded graphics less specialEmbedded Recipes 2019 - Making embedded graphics less special
Embedded Recipes 2019 - Making embedded graphics less special
Anne Nicolas556 views
Embedded Recipes 2019 - Linux on Open Source Hardware and Libre Silicon von Anne Nicolas
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
Anne Nicolas872 views
Embedded Recipes 2019 - From maintaining I2C to the big (embedded) picture von Anne Nicolas
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
Anne Nicolas263 views
Embedded Recipes 2019 - Testing firmware the devops way von Anne Nicolas
Embedded Recipes 2019 - Testing firmware the devops wayEmbedded Recipes 2019 - Testing firmware the devops way
Embedded Recipes 2019 - Testing firmware the devops way
Anne Nicolas609 views
Embedded Recipes 2019 - Herd your socs become a matchmaker von Anne Nicolas
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
Anne Nicolas83 views
Embedded Recipes 2019 - LLVM / Clang integration von Anne Nicolas
Embedded Recipes 2019 - LLVM / Clang integrationEmbedded Recipes 2019 - LLVM / Clang integration
Embedded Recipes 2019 - LLVM / Clang integration
Anne Nicolas1.1K views
Embedded Recipes 2019 - Introduction to JTAG debugging von Anne Nicolas
Embedded Recipes 2019 - Introduction to JTAG debuggingEmbedded Recipes 2019 - Introduction to JTAG debugging
Embedded Recipes 2019 - Introduction to JTAG debugging
Anne Nicolas1.3K views
Embedded Recipes 2019 - Pipewire a new foundation for embedded multimedia von Anne Nicolas
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
Anne Nicolas1.4K views
Kernel Recipes 2019 - ftrace: Where modifying a running kernel all started von Anne Nicolas
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
Anne Nicolas44.2K views
Kernel Recipes 2019 - Suricata and XDP von Anne Nicolas
Kernel Recipes 2019 - Suricata and XDPKernel Recipes 2019 - Suricata and XDP
Kernel Recipes 2019 - Suricata and XDP
Anne Nicolas1.5K views
Kernel Recipes 2019 - Marvels of Memory Auto-configuration (SPD) von Anne 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)
Anne Nicolas976 views

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