25
1 Prototypage IoT Yocto Prototypage IoT avec Pierre Ficheux ([email protected]) Septembre 2016

Prototypage IoT avec - Meetup · 2016. 10. 5. · Prototypage IoT Yocto 11 Yocto / OE Yocto est un projet « chapeau » démarré en 2010 Intègre de nombreux projets comme OE, BitBake,

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Prototypage IoT avec - Meetup · 2016. 10. 5. · Prototypage IoT Yocto 11 Yocto / OE Yocto est un projet « chapeau » démarré en 2010 Intègre de nombreux projets comme OE, BitBake,

1Prototypage IoT Yocto

Prototypage IoT avec

Pierre Ficheux ([email protected])

Septembre 2016

Page 2: Prototypage IoT avec - Meetup · 2016. 10. 5. · Prototypage IoT Yocto 11 Yocto / OE Yocto est un projet « chapeau » démarré en 2010 Intègre de nombreux projets comme OE, BitBake,

2Prototypage IoT Yocto

Différents types d'objets

● Objet simple de type capteur– Micro-contrôleur

– Logiciel « bare metal » ou OS léger type Contiki ou RIOT

● Objet complexe– CPU avec MMU

– OS Linux ou Android

Parrot flower power (µC) Eccelenza touch (Yocto)

Page 3: Prototypage IoT avec - Meetup · 2016. 10. 5. · Prototypage IoT Yocto 11 Yocto / OE Yocto est un projet « chapeau » démarré en 2010 Intègre de nombreux projets comme OE, BitBake,

3Prototypage IoT Yocto

Linux/IoT

● A priori n'est pas l'OS le plus adapté (32 bits)● Mais selon IoT developer Survey 2016, part des OS

– 73 % Linux

– 23 % « bare metal » (sans OS)

– 12 % FreeRTOS

– 6 % Contiki

● Cependant il y a Linux et Linux !– Distribution

– « Build system »

Page 4: Prototypage IoT avec - Meetup · 2016. 10. 5. · Prototypage IoT Yocto 11 Yocto / OE Yocto est un projet « chapeau » démarré en 2010 Intègre de nombreux projets comme OE, BitBake,

4Prototypage IoT Yocto

Distribution Linux

● La plupart des développeurs utilisent des distributions– Ubuntu, Debian, Fedora, etc.

● Environnement connu, simple à aborder, idéal pour débuter mais :

– Empreinte mémoire importante

– Temps de démarrage

– Reste un environnement de développement avant tout

– Faible traçabilité

– Multi-plateforme limité

– Bref, peu adapté à l'IoT

● Solution alternative → le « build system » !

Page 5: Prototypage IoT avec - Meetup · 2016. 10. 5. · Prototypage IoT Yocto 11 Yocto / OE Yocto est un projet « chapeau » démarré en 2010 Intègre de nombreux projets comme OE, BitBake,

5Prototypage IoT Yocto

Outils de « build system »

● Outil de création de distribution● Crée la distribution à partir des sources des

composants en utilisant un « moteur »● L'outil ne fournit pas les sources mais des recettes et

prend en compte les dépendances● L'outil produit les différents éléments de la distribution

– Bootloader

– Noyau Linux

– Images du root-filesystem + applications intégrées

● Meilleure solution au niveau empreinte mémoire et traçabilité

Page 6: Prototypage IoT avec - Meetup · 2016. 10. 5. · Prototypage IoT Yocto 11 Yocto / OE Yocto est un projet « chapeau » démarré en 2010 Intègre de nombreux projets comme OE, BitBake,

6Prototypage IoT Yocto

Les principaux outils disponibles

● Yocto/OpenEmbedded– Moteur écrit en Python

– Très puissant mais lourd

– Basé sur des fichiers de configuration

● Buildroot– Basé sur la commande « make »

– Au départ un démonstrateur pour uClibc

● OpenWrt– Dérivé de BR

– Gère les paquets binaires

– Utilisé sur WeIO (IoT)

Page 7: Prototypage IoT avec - Meetup · 2016. 10. 5. · Prototypage IoT Yocto 11 Yocto / OE Yocto est un projet « chapeau » démarré en 2010 Intègre de nombreux projets comme OE, BitBake,

7Prototypage IoT Yocto

Buildroot

● Initialement un démonstrateur de uClibc (Micro-C-libC)● Une version officielle tous les 3 mois depuis 2009.02● Outil de configuration graphique identique à celui du

noyau● Léger, rapide, basé sur des fichiers Makefile● Pas de système de paquets → « firmware Linux »

Page 8: Prototypage IoT avec - Meetup · 2016. 10. 5. · Prototypage IoT Yocto 11 Yocto / OE Yocto est un projet « chapeau » démarré en 2010 Intègre de nombreux projets comme OE, BitBake,

8Prototypage IoT Yocto

OpenEmbedded

● OE est un « framework de compilation croisée » ● Démarré par Chris Larson, Michael Lauer et Holger

Schuring pour OpenZaurus en 2003 → remplacer Buildroot

● Le Zaurus (SHARP) est le « premier » PDA sous Linux en 2001

Page 9: Prototypage IoT avec - Meetup · 2016. 10. 5. · Prototypage IoT Yocto 11 Yocto / OE Yocto est un projet « chapeau » démarré en 2010 Intègre de nombreux projets comme OE, BitBake,

9Prototypage IoT Yocto

Les principes d'OpenEmbedded

● OE utilise un « séquenceur » nommé BitBake (écrit en Python) → recette (recipe)

● La recette correspond à un fichier .bb (BitBake)● OE utilise un principe d'héritage → inherit● On peut « dériver » une recette par un .bbappend● OE utilise également des classes (.bbclass), des en-

tête (.inc) et des configurations (.conf)● Les recettes sont organisées en couches (layers) → meta-*

● OE permet de créer des paquets binaires (RPM, IPK, DEB) contrairement à BR

Page 10: Prototypage IoT avec - Meetup · 2016. 10. 5. · Prototypage IoT Yocto 11 Yocto / OE Yocto est un projet « chapeau » démarré en 2010 Intègre de nombreux projets comme OE, BitBake,

10Prototypage IoT Yocto

Yocto ?

« yocto (symbole y) est le préfixe du système international d'unités (SI) qui représente 10-24

fois cette unité (soit un quatrillionième).

Adopté en 1991, il provient du grec κτώ, huit car =ὀ (10-3)8 »

Ainsi parlait Wikipedia !

Page 11: Prototypage IoT avec - Meetup · 2016. 10. 5. · Prototypage IoT Yocto 11 Yocto / OE Yocto est un projet « chapeau » démarré en 2010 Intègre de nombreux projets comme OE, BitBake,

11Prototypage IoT Yocto

Yocto / OE

● Yocto est un projet « chapeau » démarré en 2010 ● Intègre de nombreux projets comme OE, BitBake,

Poky, Eglibc, ADT, Hob, …● Plusieurs dizaines de membres dont Intel, Montavista,

Freescale, Huawei, Mentor Graphics, Gumstix, ...● L'architecte est Richard Purdie qui a 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 »

● Un véritable projet collaboratif promu par la fondation Linux

● De nombreux BSP industriels utilisent Yocto !

Page 12: Prototypage IoT avec - Meetup · 2016. 10. 5. · Prototypage IoT Yocto 11 Yocto / OE Yocto est un projet « chapeau » démarré en 2010 Intègre de nombreux projets comme OE, BitBake,

12Prototypage IoT Yocto

Yocto / OE, suite

● Utilise des paquets RPM, DEB ou IPK● Syntaxe complexe mais très bonne documentation● Investissement initial important

My project

Page 13: Prototypage IoT avec - Meetup · 2016. 10. 5. · Prototypage IoT Yocto 11 Yocto / OE Yocto est un projet « chapeau » démarré en 2010 Intègre de nombreux projets comme OE, BitBake,

13Prototypage IoT Yocto

Principe des « layers »

Page 14: Prototypage IoT avec - Meetup · 2016. 10. 5. · Prototypage IoT Yocto 11 Yocto / OE Yocto est un projet « chapeau » démarré en 2010 Intègre de nombreux projets comme OE, BitBake,

14Prototypage IoT Yocto

Buildroot ou Yocto ?

schéma de Thomas Petazzoni

Page 15: Prototypage IoT avec - Meetup · 2016. 10. 5. · Prototypage IoT Yocto 11 Yocto / OE Yocto est un projet « chapeau » démarré en 2010 Intègre de nombreux projets comme OE, BitBake,

15Prototypage IoT Yocto

Yocto « in a nutshell »

● Installation de Poky 2.1 (Yocto reference distro)$ git clone -b krogoth git://git.yoctoproject.org/poky

● Création du répertoire de travail$ cd poky

$ source oe-init-build-env qemux86-build

● Définition (optionnelle) du type de machine dans conf/local.conf#MACHINE ?= "qemuarm"

...

# This sets the default machine to be qemux86 if no other machine is selected:

MACHINE ??= "qemux86"

● Construction d'une image simple$ bitbake core-image-minimal

● Test de l'image$ runqemu qemux86

Page 16: Prototypage IoT avec - Meetup · 2016. 10. 5. · Prototypage IoT Yocto 11 Yocto / OE Yocto est un projet « chapeau » démarré en 2010 Intègre de nombreux projets comme OE, BitBake,

16Prototypage IoT Yocto

Yocto/RPi « in a nutshell »

● Installation de la couche RPi (meta-raspberrypi)$ cd poky

$ git clone git://git.yoctoproject.org/meta-raspberrypi

● Création du répertoire de travail$ source oe-init-build-env rpi-build

● Ajout de la couche RPi à conf/bblayers.confBBLAYERS ?= " \

...

<path>/poky/meta-raspberrypi \

● Ajout du type de machine à conf/local.confMACHINE = "raspberrypi"

● Création de l'image$ bitbake core-image-minimal

● Copie de l'image sur la carte SD$ sudo dd if=<path>/core-image-minimal-raspberrypi.rpi-sdimg of=/dev/sdb

Page 17: Prototypage IoT avec - Meetup · 2016. 10. 5. · Prototypage IoT Yocto 11 Yocto / OE Yocto est un projet « chapeau » démarré en 2010 Intègre de nombreux projets comme OE, BitBake,

17Prototypage IoT Yocto

Cas d'usage = maquette IoT

● Construire – rapidement - un capteur de température pour un démonstrateur IoT (Smile)

– Raspberry Pi

– Sonde I²C (MPL115A2)

– Wi-Fi (USB)

– Protocole HTTP → /var/pages/values.txt

Page 18: Prototypage IoT avec - Meetup · 2016. 10. 5. · Prototypage IoT Yocto 11 Yocto / OE Yocto est un projet « chapeau » démarré en 2010 Intègre de nombreux projets comme OE, BitBake,

18Prototypage IoT Yocto

Schéma global du démonstrateur

Page 19: Prototypage IoT avec - Meetup · 2016. 10. 5. · Prototypage IoT Yocto 11 Yocto / OE Yocto est un projet « chapeau » démarré en 2010 Intègre de nombreux projets comme OE, BitBake,

19Prototypage IoT Yocto

Principe de construction

● Partir de la distribution la plus simple « core-image-minimal »

● Ajouter des options et fonctionnalités standards– Gestion de paquets (package management)

– Recettes standards ou « dérivées »

– Recette(s) dédiée(s) (pilotage capteur I²C)

● Création des métadonnées → meta-iot$ yocto-layer create iot

● Modification du fichier local.conf (pour les tests)● Création d'une distribution dérivée → « rpi-iot-image »● Bon exercice d'apprentissage des techniques Yocto !

Page 20: Prototypage IoT avec - Meetup · 2016. 10. 5. · Prototypage IoT Yocto 11 Yocto / OE Yocto est un projet « chapeau » démarré en 2010 Intègre de nombreux projets comme OE, BitBake,

20Prototypage IoT Yocto

Dérivation et priorité de recette

● Principe très utilisé sous Yocto/OE● Une recette (.bb) est définie dans une couche A● On modifie (ou on ajoute) des options/données dans un .bbappend situé dans une autre couche B

● On peut aussi placer le même .bb dans la couche B si la priorité est > A

● Dans notre cas– Configuration Wi-Fi

– Activation I²C dans config.txt

– Chargement automatique du module i2c-dev

Page 21: Prototypage IoT avec - Meetup · 2016. 10. 5. · Prototypage IoT Yocto 11 Yocto / OE Yocto est un projet « chapeau » démarré en 2010 Intègre de nombreux projets comme OE, BitBake,

21Prototypage IoT Yocto

Configuration réseau (Wi-Fi + HTTP)

● Contrôleur pris en charge + chargement du module → wlan0

● Ajout de quelques paquetsIMAGE_INSTALL_append += "iw wpa_supplicant lighttpd"

● Modification /etc/network/interfaces● Authentification WPA

# wpa_passphrase <ESSID> <password> > /etc/wpa_supplicant.conf

# ifdown wlan0

# ifup wlan0

Page 22: Prototypage IoT avec - Meetup · 2016. 10. 5. · Prototypage IoT Yocto 11 Yocto / OE Yocto est un projet « chapeau » démarré en 2010 Intègre de nombreux projets comme OE, BitBake,

22Prototypage IoT Yocto

Prise en charge I²C

● Modification config.txtdtparam=i2c_arm=on

→ do_deploy_append() ● Ajout des paquets nécessaires à local.conf

IMAGE_INSTALL_append += "i2c-tools kernel-modules"

● Chargement du pilote I²CKERNEL_MODULE_AUTOLOAD += "i2c-dev"

→ ajout au .bbappend du noyau● Création de la recette pour pilotage MPL115A2

– Adaptation du programme existant (basé sur WiringPi)

– Service lancé au démarrage (interrogation toutes les 20 secondes) → classe update-rc.d

Page 23: Prototypage IoT avec - Meetup · 2016. 10. 5. · Prototypage IoT Yocto 11 Yocto / OE Yocto est un projet « chapeau » démarré en 2010 Intègre de nombreux projets comme OE, BitBake,

23Prototypage IoT Yocto

NTP

● Demande d'une fonctionnalité NTP (a posteriori)● Intégré à meta-openembedded

$ cd poky

$ git clone git://git.openembedded.org/meta-openembedded

$ git checkout krogoth

$ bitbake-layers add-layer ../meta-openembedded/meta-oe

$ bitbake-layers add-layer ../meta-openembedded/meta-python

$ bitbake-layers add-layer ../meta-openembedded/meta-networking

$ bitbake ntp tzdata

● Configuration de la zone géographique# rm -f /etc/localtime

# ln -s /usr/share/zoneinfo/Europe/Paris /etc/localtime

# cat /etc/default/ntpdate

...

NTPSERVERS="pool.ntp.org"

Page 24: Prototypage IoT avec - Meetup · 2016. 10. 5. · Prototypage IoT Yocto 11 Yocto / OE Yocto est un projet « chapeau » démarré en 2010 Intègre de nombreux projets comme OE, BitBake,

24Prototypage IoT Yocto

Mise à jour

● Outil SMART inclus au package management● Création des index des paquets

$ bitbake package-index

● Création des « canaux » HTTP sur la cible# smart channel --add <channel> baseurl=http://<pkg-dir>

# smart update

# smart install ntpdate tzdata

Page 25: Prototypage IoT avec - Meetup · 2016. 10. 5. · Prototypage IoT Yocto 11 Yocto / OE Yocto est un projet « chapeau » démarré en 2010 Intègre de nombreux projets comme OE, BitBake,

25Prototypage IoT Yocto

Références

● http://elinux.org/Build_Systems

● https://www.yoctoproject.org/

● http://buildroot.uclibc.org

● http://iot.ieee.org/images/files/pdf/iot-developer-survey-2016-report-final.pdf

● https://openwrt.org

● http://eccellenzatouchvki.com

● http://www.parrot.com/fr/produits/flower-power

● https://www.yoctoproject.org/ecosystem/iot

● http://we-io.net/hardware

● https://github.com/nodesign/weioBoard

● https://www.raspberrypi.org/documentation/hardware/raspberrypi/schematics/README.md