Le projet Yocto est un constructeur de distribution Linux embarqué qui utilise plusieurs autres projets open source. Une distribution Linux est un ensemble de packages logiciels et de politiques, et il existe des centaines de distributions Linux disponibles. La plupart d'entre eux ne sont pas conçus pour les systèmes embarqués et ils manquent de la flexibilité nécessaire pour atteindre les tailles d'empreinte cibles et les ajustements de fonctionnalités, et ne conviennent pas aux systèmes à ressources limitées.
Le projet Yocto, en revanche, n'est pas une distribution en soi; il vous permet de créer une distribution Linux conçue pour votre système embarqué particulier. Le projet Yocto fournit une distribution de référence pour Linux embarqué, appelée Poky.
Le projet Yocto a à sa base les projets BitBake et OpenEmbedded-Core (OE-Core). Ensemble, ils forment le système de build Yocto qui construit les composants nécessaires à un produit Linux embarqué, à savoir :
- Une image de chargeur de démarrage
- Une image du noyau Linux
- Une image du système de fichiers racine
- Chaînes d'outils et kits de développement logiciel (SDK) pour le développement d'applications
Avec ceux-ci, le Yocto Project couvre à la fois les besoins des développeurs de systèmes et d'applications. Lorsque le projet Yocto est utilisé comme environnement d'intégration pour les bootloaders, le noyau Linux et les applications de l'espace utilisateur, on parle de développement système.
1. Pour ouvrir le menuconfig du noyau linux (ici, j'utilise la couche meta-intel), exécutez les commandes suivantes.
bitbake -c menuconfig linux-intel
Si vous utilisez le noyau yocto ce sera :
bitbake -c menuconfig linux-yocto
2. Pour vérifier si votre recette bbappend est analysée par bitbake, exécutez la commande suivante :
bitbake-layers show-appends
3. Pour ajouter un package particulier dans votre système de fichiers racine.
Ouvrez votre fichier local.conf et ajoutez le nom de la recette ci-dessous :
IMAGE_INSTALL += "recipe-name"
Par exemple :
IMAGE_INSTALL += "libusb"
ou
IMAGE_INSTALL_append = "libusb"
Si vous souhaitez que ce package ne soit inclus que dans une image particulière,
IMAGE_INSTALL_append_pn-[image-name] = "recipe-name"
Par exemple :
IMAGE_INSTALL_append_pn-core-image-sato = "libusb"
4. Pour inclure un module de noyau dans votre système de fichiers racine :
MACHINE_ESSENTIAL_EXTRA_RDEPENDS += "kernel-module-cp210x"
5. Pour charger automatiquement le module au démarrage :
KERNEL_MODULE_AUTOLOAD += "cp210x"
6. Commande pour vérifier la liste des images disponibles.
Exécutez la commande suivante dans votre répertoire source :
$ ls meta*/recipes*/images/*.bb
7. Commande pour exécuter l'image générée dans QEMU :
$ runqemu [machine] [zImage] [filesystem]
Par exemple :
$ runqemu qemux86 core-image-minimal
8. Commande pour lister les machines disponibles :
$ ls meta*/conf/machine/*.conf
9. Commande pour générer le SDK pour une image particulière :
$ bitbake [imagename] -c populate_sdk
Par exemple :
$ bitbake core-image-full-cmdline -c populate_sdk
10. Ordre dans lequel toutes les tâches exécutées sont stockées dans :
[build directory]/tmp/work/[machine toolchain]/[package name]/[package version]/temp/log.task_order
Par exemple :
build/tmp/work/corei7-64-poky-linux/grep/3.1-r0/temp/log.task_order
11. Générez des informations sur l'arborescence des dépendances dans la syntaxe à points :
$ bitbake -g core-image-minimal
La commande ci-dessus génère un graphique de dépendance. Bitbake crée les fichiers pn-buildlist, recette-dépend.dot et tâche-dépend.dot.
- pn-buildlist :Liste simple des packages qui vont être construits
- recipe-depends.dot :Afficher les dépendances entre les recettes
- task-depends.dot :Affiche les dépendances entre les tâches.
12. Affiche les variables d'environnement :
$ bitbake -e [recipe/target name]
Par exemple :
$ bitbake -e core-image-minimal | grep ^SDKMACHINE
13. Activer la sortie détaillée des tâches shell :
$ bitbake -v [recipe/target name]
Par exemple :
$ bitbake -v core-image-minimal
14. Continuez bitbake même après une erreur. Cela sera utile lorsque vous avez commencé une construction et que vous êtes allé déjeuner et que vous ne voulez pas que le bitbake s'arrête s'il ne parvient pas à récupérer un fichier sur Internet.
$ bitbake -k [target]
Par exemple :
$ bitbake -k core-image-minimal
15. Forcez la cible à s'exécuter même si un sstate-cache est disponible pour elle.
$ bitbake -f [target/recipe name]
Par exemple :
$ bitbake -f busybox