[IGEP v2][Angstrom] Construction d'Angstrom avec OpenEmbedded et Bitbake
- 04 12 2010
- Rédigé par PEB
- Écrire un Commentaire
Après Android, nous allons tester une autre distribution orientée pour le monde de l'embarqué, Angstrom!
L'utilisation d'OpenEmbedded et de BitBake n'aura plus de secrets pour vous ;)
Angstrom est une distribution intéressante. Elle est légère, peut gourmande en ram et relativement simple à mettre en place. Si nous devions lui trouver un défaut, je ne pourrais en citer qu'un : le temps de construction de l'image rootfs extrêmement longue... Mais bon, après c'est le PC qui travaille, ce n'est donc pas vraiment un défaut^^.
Au niveau des informations sur cette distribution, il n'y en a pas beaucoup... Depuis peu, Archos s’intéresse à cette distribution pour ses tablettes, il est donc possible que les informations fleurissent petit à petit.
C'est un projet issu du regroupement de plusieurs autres projets : OpenZaurus, OpenEmbedded et OpenSimpad.
Voila pour les présentations. Je vous laisse le lien du site officiel : http://www.angstrom-distribution.org/.
Cet article fait appel à des notions vues dans les articles précédents. J'ai essayé de détailler au maximum, cependant certaines informations peuvent ne pas être ré-expliquées. Dans ce cas je vous conseil d’aller faire un petit tour dans la rubrique ARM ;) |
Informations sur la construction d'Angstrom
La construction de cette distribution se fait à l'aide de deux outils :
- OpenEmbedded : c'est un regroupement de composants libre pouvant être utilisés pour un système embarqué. Une sorte de grosse bibliothèque de l'embarquée :)
- BitBake : c'est un exécuteur de tâches et un gestionnaire de metadata. Il permet de construire des packages en gérant les dépendances, la cross-compilation,... En gros, c'est le make pour OpenEmbedded (vulgarisation pour simplifier les choses).
Préparation de notre environnement de travail
Avant de commencer, nous devons installer quelques packages :
$ apt-get install diffstat texi2html git cvs subversion gawk chrpath gcc g++ python-psyco |
Ensuite on se place dans notre dossier de travail habituel :
$ cd /srv/nfs/angstrom/image-base/igep020/ |
Installation des outils
Installation de BitBake
- Téléchargement de BitBake : bitbake-1.10.1.tar.gz (lien serveur).
- On créer nos dossiers de travail :
// Création de dossiers
$ mkdir -p build/conf
$ mkdir -p bibake
$ tar xfvz bitbake-1.10.1.tar.gz -C bitbake/
Installation d'OpenEmbedded
- On télécharge OpenEmbedded :
$ git clone git://git.openembedded.org/openembedded
Configuration pour la construction d'images/packages
- On doit créer un fichier de configuration pour spécifier à Bitbake notre cible.
Pour cela, suivez les étapes suivantes :
// Copie du fichier de configuration de base :
$ cp openembedded/conf/local.conf.sample build/conf/local.conf
// Edition du fichier de configuration
$ nano build/conf/local.conf
//Modifiez les lignes suivantes
- DL_DIR = "/srv/nfs/angstrom/image-base/igep020/sources"
- BBFILES = "/srv/nfs/angstrom/image-base/igep020/openembedded/recipes/*/*.bb"
- MACHINE = "igep0020"
- DISTRO = "angstrom-2008.1"
- Commentez la dernière ligne
Quelques petites explications sur ces modifications.
- Pour connaitre les distributions possibles, vous pouvez faire un tour dans le dossier openembedded/conf/distro/. Les fichiers .conf représentent les différents distributions.
- Pour connaitre les machines disponibles, suivez ce lien : http://gitorious.org/angstrom/openembedded/trees/org.openembedded.dev/conf/machine.
Dernière chose, on configure les variables d'environnements :
// Nos variables habituelles pour la cross-compilation
$ export ARCH=arm
$ export CROSS_COMPILE=/opt/codesourcery/bin/arm-none-linux-gnueabi-
$ export PATH=/opt/codesourcery/bin/:$PATH
// Variables pour BitBake
$ export BBPATH=$/nfs/angstrom/image-base/igep020/stuff/angstrom-setup-scripts/build:/nfs/angstrom/image-base/igep020/stuff/angstrom-setup-scripts/sources/openembedded
$ export PATH=/nfs/angstrom/image-base/igep020/stuff/angstrom-setup-scripts/sources/bitbake/bin:$PATHPensez bien à les configurer à chaque nouvelle session.
Comme nos variables commencent à devenir longue à taper, je vous conseil de créer un fichier qui permettra de les charger rapidement. Pour cela créer un fichier .vars_bashrc où vous souhaitez (le nom n'a pas d'importance), mettez toutes les variables d'environnement que vous souhaitez dedans.
Pour le charger (pour la session), tapez la commande suivante :
$ source .vars_bashrc
Pensez bien à mettre à jour BitBake et OpenEmbedded de temps en temps (je vous rappel qu'avec git, pour mettre à jour, vous devez faire un git pull).
Construction d'images/packages
Pour avoir la fameuse rootfs d'Angstrom, nous allons construire l'image à l'aide des outils précédements installés. Vous allez voir, c'est un jeu d'enfant :)
Nous allons commencer par construire une image de base d'Angstrom (très légère, mais "console" uniquement). Pour cela, tapez la commande suivante dans votre terminal :
$ MACHINE=igep0020 bitbake base-image |
ATTENTION : La construction m'a pris environ 24h! Durant tout ce temps, le PC doit resté connecté à internet! Sachez le, le moindre package peut prendre plusieurs heures de construction! (exemple : nano = 9h). |
Si vous souhaitez construire une image avec une interface, tapez ceci :
$ MACHINE=igep0020 bitbake x11-image |
En gros vous devez saisir < nom_image_souhaitee >-image ou alors uniquement < package >.
Voila, il n'y a rien de plus à savoir pour la construction :)
Test de la rootfs Angstrom
La première chose à faire et à ne surtout pas oublier, c'est la configuration réseau du PC, du montage nfs, du serveur tftp et d'u-boot.
Pour ce qui est du PC : (en root)
$ ifconfig eth0 192.168.254.10 netmask 255.255.255.0 |
Pour le NFS ajoutez simplement les lignes suivantes au fichier /etc/exports :
# Angstrom image-base /srv/nfs/angstrom/image-base/igep020/rootfs/ 192.168.254.254(rw,no_root_squash,no_subtree_check,sync) |
On pense à relancer le serveur :
$ /etc/init.d/nfs-kernel-server restart |
Pour le tftp, rien à faire. Pensez juste à mettre votre uImage (celle que vous avez utilisé pour BusyBox par exemple) dans le dossier :
/srv/tftp/angstrom/base-image/igep020/kernel/.
Pour uboot, lancez putty, allumez la carte et entrez dans le menu de config u-boot. Vérifiez ensuite les variables suivantes :
nfs-boot=if ping ${serverip}; then run nfs-bootargs; tftp 0x80000000 ${distro}/${project}/${machine}/kernel/uImage; bootm; fi; nfs-bootargs=setenv bootargs ${bootargs-base} init=/init root=/dev/nfs nfsroot=${serverip}:/srv/nfs/${distro}/${project}/${machine}/rootfs ; run addip |
Si vous n'avez pas ces valeurs, je vous rappel la commande pour les modifier :
$ setenv nfs-boot 'if ping ${serverip}; then run nfs-bootargs; tftp 0x80000000 ${distro}/${project}/${machine}/kernel/uImage; bootm; fi;' $ setenv nfs-bootargs 'setenv bootargs ${bootargs-base} init=/init root=/dev/nfs nfsroot=${serverip}:/srv/nfs/${distro}/${project}/${machine}/rootfs ; run addip' |
Voila! Tout est ok! Maintenant vous relancez la carte (par l'alimentation ou par un petit run bootcmd dans u-boot).
Si vous avez compilé une image de base, vous obtenez ceci :
(Comment ça mon image est floue? et pas centrée? et bien...oui^^)
Si vous avez compilé une image x11, vous obtenez ceci :
Nous avons terminé! Au cours de cet article, vous avez pu remarquer l'avantage majeur de cette distribution : sur quelques Mo vous avez une rootfs avec une interface graphique ultra légère! C'est une très bonne base de travail ;)
Pour la rootfs "console" par contre le gain est beaucoup moins important. En effet, environ 24h de construction est peut être beaucoup pour un simple rootfs... Après c'est intéressant de savoir que cela existe.
Si vous avez des questions, remarques ou autres, les com' ci-dessous sont là pour ça.
Hello,
J'ai une question, tes tutos sont-ils réalisés sous le Ubuntu 8.04 iGEP SDK de l'ISEE (avec une machine virtuel) ou en natif ?
++
smK
Bonsoir,
Non je n'utilise pas la machine virtuelle d'ISEE, je travail directement sur ma Debian.
Le concept de la machine virtuelle "prêt à l'emploi" est intéressant mais au final trop gourmand en ressource et donc pas forcement adapté pour de grosses compilations (surtout sur mon PC actuel^^).
Je ré-évaluerai la chose à la sortie des nouveaux MacBook Pro :)
Bonjour, Felicitations pour votre bel article ! J'attend avec impatience la suite. Salutations, Emmanuelle
Bonjour,
super article. Je possède une igep com module (igep0030)
quel est réellement la différence avec celle que vous utilisé : la igep0020.
quel est la procédure à suivre pour builder avec la igep0030 sachant que dans la distrib d'Angstrom il n'existe que la igepv2 (0020).
merci,
Fred.
Bonjour,
Au niveau caractéristique il n'y a pas beaucoup de différence :
- pas d'ethernet sur la 0030
- pas sortie video sur la 0030
- 1 seul pour USB sur la 0030
- pas de sortie/entée audio sur la 0030
- pas d'uart sur la 0030
Il est donc possible que la version 0020 soit fonctionnelle pour la 0030 si les périphériques sont câblés de la même manière sur les deux cartes. Par contre ce n'est pas une solution propre.
Une autre solution pas "clean clean" mais fonctionnelle et acceptable, serait de générer la distribution pour une carte 0020 mais d'utiliser le kernel et les modules fourni par ISEE pour la carte 0030 et non pas le kernel généré en même temps que la rootfs Angstrom. Cette solution présente l'avantage de ne pas a avoir à retoucher la config d'angstrom mais de pouvoir supporter pleinement votre carte.
Pour bien faire les choses il faudrait récupérer le BSP (fichier qui décrit les IO de la carte) dans les souces du kernel utilisé par ISEE et l'utiliser pour la construction de la distribution angström. Par contre cette solution est la plus complexe à mettre en oeuvre car elle demande de bien connaitre le principe de fonctionnement de Bitbake et d'OpenEmbedded.
Pour information, ISEE est récemment passé sur Yocto. Yocto reprend le même principe qu'Angström : On défini une target, on configure les packages qu'on veut installer et on construit l'image et le sdk. Si vous vous intéressez à ce genre de construction automatisée je vous conseil de faire un tour sur le site d'ISEE et de tester leur solution Yocto, vous serez probablement séduit ;)
merci pour ces infos.
effectivement Yocto me parait pas mal, mais je ne sais pas si l'on peut avoir un système aussi légé qu'avec Angström .
Malgré tout je vais utiliser la solution Yocto car c'est celle qui semble la plus soutenus.
Avez vous fait déja l'expériance de construire un système avec Yocto ? un tuto ?
Bonsoir,
Oui, avec Yocto on maitrise la totalité des composants installés sur la rootfs, il est donc tout à fait possible d'avoir un système aussi léger qu'Angstrom.
J'utilise Yocto dans un autre cadre que l'IGEP pour construire des systèmes GNU/Linux, et j'en suis très satisfait!
Actuellement je n'ai pas trop trop de temps pour réaliser un tuto, je vais tout de même y réfléchir ;)
Hello, super Merci pour l' article, Explications vraiment au top
Hello, super Merci pour l' information, je partage cette page sur mes reseaux sociaux