Accueil

Voici décrit dans cette page mes premiers pas avec Yocto

 

1.Introduction

La façon la plus simple et la plus rapide pour obtenir un système d'exploitation GNU/Linux embarqué est d'utiliser des outils de génération de distribution automatisée. Il existe quelques projets de ce type comme:

Nom
Avantage
Inconvénient

Buildroot

 

Empreinte mémoire faible. pas de gestionnaire de paquet =>mise à jour du système à la main. Le système d'exploitation généré est vu comme un firmware par les professionnels.
OpenEmbedded Génère une trentaine de distributions différentes La prise en main n'est pas évidente.
OpenWRT Simple à prendre en main Outil spécialisé pour le matériel dédié au réseau (Wifi-switch-routeur)
LTIB Ressemble à Buildroot => prise en main rapide Produit uniquement des images BSP
PTXdist Simple à prendre en main Menu de configuration à la sauce ncurses.

Je choisis de mettre en oeuvre OpenEmbedded. Ce dernier fait désormais parti intégrante du projet Yocto mis en place par la Linux Fondation en 2010 et soutenu par un grand nombre de société comme Intell, WindRiver, MontaVista, Mentor Graphics, Texas Instrument, etc...

2.Théorie

Grosso modo, Yocto s'appuie sur le projet OpenEmbedded en l'améliorant et en fusionnant les équipes de développeurs d'OpenEmbedded avec celle dédiée au projet Yocto qui développait dans leur coin la distribution Poky. La version initiale d'OpenEmbedded "OE-Dev" devient "OE-Core". C'est à partir de OpenEmbedded-Core (OE-Core) que s'appuie le projet Yocto dont le but est d'unifier sous un même projet divers outils et d'élements capablent d'automatiser et de simplifier la génération de distributions GNU/Linux embarqué à partir du code source original. Les distributions sont compatibles pour x86 (32 et 64 bits), ARM, MIPS, PowerPC.

La structure de Yocto est en couche et son moteur est bitbake. Ce dernier, écrit en python, est codé pour executer les tâches nécessaires pour obtenir une distribution Linux embarqué choisie par l'utilisateur.

En fouillant dans les entrailles de Yocto, nous y trouvons :

- des recettes (extension .bb) qui décrivent la manière de compiler un paquet pour la cible. Il se peut qu'une seule et même recette décrit la conception d'une distribution complète,

- des classes (extension .bbclass) qui décrivent les règles communes aux recettes,

- des fichiers de configuration (extension .conf) qui précisent les paramètres de la distribution cible.

Pour concevoir une distribution embarqué (dans notre cas : Yocto), Bitbake va collecter toutes les informations indispensables à la réalisation dans les recettes. Ensuite, il va générer un arbre de dépendances qui donne une chronologie des différentes étapes pendant toute la phase de conception de la distribution. Puis, Bitbake télécharge et extrait toutes les sources via Internet. Comme toutes les sources ne sont pas toutes compatibles entre elles et/ou pour l'architecture cible, Bitbake les patch. A partir des sources finales, la conception des différents paquets commence en respectant les paramètres des différents fichiers de configuration. Pour finir, l'image finale est générée à partir des paquets sous forme compressé. Quant au noyau, il est evidemment obtenu sous forme binaire.

3. Installation d'OpenEmbedded

a) Préparation

Il faut vérifier si votre distribution contient un certain nombres d'éléments indispensables à la bonne mise en place de l'environnement OpenEmbedded. Nous allons installer Poky qui est la distribution de référence du projet Yocto.

Paquets indispensables sous Debian/Ubuntu:

sudo aptitude install gawk wget git-core diffstat unzip texinfo build-essential chrpath libsdl1.2-dev xterm

Il existe 2 façons d'obtenir Poky :

- Sous forme de tarball (tar.gz) : directement téléchargeable depuis le site du projet ICI,

- A partir de git (outil de version) : à partir d'un répertoire que vous aurez créé, il suffit d'entrer la commande suivante depuis un terminal: git clone git://git.yoctoproject.org/poky

!! si vous êtes derrière un proxy, il faut ajouter les variables d'environnement suivantes:

http_proxy=your_proxy:port

https_proxy=your_proxy:port

ftp_proxy=your_proxy:port

Nous choisissons de télécharger le paquet et de le décompresser :

poky-dylan-9.0.0.tar.bz2

tar jxvf poky-dylan-9.0.0.tar.bz2

b) Initialisation

Depuis le répertoire poky-dylan-9.0.0, il convient d'initialiser l'environnement en lançant la commande :

source oe-init-build-env

Le répertoire "build" est créé. Il est possible d'initialiser l'environnement avec un autre nom de répertoire en spécifiant le nom du répertoire :

source oe-init-build-env your_directory

c) Edition du fichier local.conf

A partir du répertoire build/conf, nous allons indiquer à OpenEmbedded via le fichier local.conf :

- quelle distribution ?

DISTRO ?= "poky"

- quelle type de machine cible sera construite le système d'exploitation embarqué GNU/Linux ?

MACHINE ?= "qemuarm"

- quelle type de gestion de paquet voulue ?

PACKAGE_CLASSES ?= "package_deb"

- quel nombre de processus de compilation que nous pouvons mettre à disposition à OpenEmbedded pour réduire le temps de compilation ?

BB_NUMBER_THREADS = "4"

PARALLEL_MAKE = "-j 4"

4. Conception de la distribution Poky

La conception de la distribution est lancée à partir du répertoire build :

cd poky-dylan-9.0.0/build

Lançons maintenant le processus de conception :

bitbake -k core-image-minimal

L'option -k permet d'ignorer les warnings. Le temps de compilation est dépendant de l'architecture de votre machine.

Le résultat est dans le répertoire : poky-dylan-9.0.0/build/tmp/deploy/images/

En regardant de plus près, nous avons le système de fichiers "rootfs" disponible sous 2 formats:

core-image-minimal-qemuarm.ext3

core-image-minimal-qemuarm.tar.bz2

et le noyau disponible sous 2 appellations:

zImage

zImage-qemuarm.bin

5. Emulation de la distribution Poky

A partir du répetoire build, lançons l'émulation grâce à l'utilitaire de Yocto:

runqemu qemuarm ./tmp/deploy/images/zImage-qemuarm.bin ./tmp/deploy/images/core-image-minimal-qemuarm.ext3


Les paramètres donnés automatiquement en arguments sont les suivants :

/home/dc/embarque/yocto/poky-dylan-9.0.0/build/tmp/sysroots/x86_64-linux/usr/bin/qemu-system-arm -kernel ./tmp/deploy/images/zImage-qemuarm.bin -net nic,vlan=0 -net tap,vlan=0,ifname=tap0,script=no,downscript=no -M versatilepb -hda ./tmp/deploy/images/core-image-minimal-qemuarm.ext3 -no-reboot -show-cursor -usb -usbdevice wacom-tablet -no-reboot -m 128 --append "root=/dev/sda rw console=ttyAMA0,115200 console=tty ip=192.168.7.2::192.168.7.1:255.255.255.0 mem=128M highres=off "

Le système démarre automatiquement :

Il suffit ensuite de se loguer en superutilisateur en tapant root

Pas de mot passe pour le moment mais c'est un bon début !

Attention : clavier en qwerty !!

Cette distribution occupe 60Mo avec le gestionnaire de paquet .deb.

Le processeur émulé est bien d'architecture ARM

Pour aller plus loin avec bitbake :

bitbake --help

 

Page mise à jour le 05/07/2013