Logiciel embarqué - Yocto build Raspberry Pi 4 une capture d’écran d’un ordinateur

Yocto build Raspberry Pi 4

dans un environnement docker

Yocto en cours d'exécution dans un conteneur docker

Dans la documentation de yocto, il y a un chapitre (2.2.2) pour la mise en place de CROss PlatformS (CROPS) comme alternative à la mise en place d'un PC linux natif.Cette alternative utilise un conteneur docker pour construire une image système personnalisée, par exemple pour le Raspberry Pi.

Malheureusement, il y a quelques petites erreurs dans la documentation relative à la configuration de cet environnement pour moi sur Mac OS X (Monterey).### Configuration du conteneur docker pour Mac OS X

Des paramètres spéciaux sont nécessaires pour utiliser le docker CROPS sous Linux, Windows et Mac OS X. Avant de configurer le conteneur pour Yocto, vous devez créer un volume docker pour stocker les résultats. Un conteneur samba docker est également utilisé pour fournir les fichiers sous Mac OS X.

Créer le volume docker

Dans une fenêtre de terminal, tapez les commandes suivantes :

docker volume create --name raspberry
docker run -it --rm -v raspberry:/workdir busybox chown -R 1000:1000 /workdir

Créer et exécuter un conteneur samba

OSX ne vous laissera pas vous connecter à un partage samba fonctionnant localement. Par conséquent, vous devez d'abord créer un alias pour 127.0.0.1 de 127.0.0.2.

sudo ifconfig lo0 127.0.0.2 alias up

Créez ensuite le conteneur samba, qui vous permet de voir les fichiers dans le volume docker :

docker create -t --expose 445 -p 127.0.0.2:445:445 --name samba -v raspberry:/workdir crops/samba

Puisque vous aurez toujours besoin d'avoir l'alias pour vous connecter au conteneur samba, vous pouvez combiner le début de samba et l'alias comme suit :

docker start samba && sudo ifconfig lo0 127.0.0.2 alias up

Vous pouvez maintenant ouvrir le répertoire de travail dans le navigateur de fichiers. Dans le finder, tapez « Command-K » et dans la boîte d'adresse du serveur, tapez « smb://127.0.0.2/workdir » et cliquez sur « Connecter ». Maintenant, vous devriez voir le contenu du volume docker dans le finder.

Créer et démarrer le conteneur Yocto

Pour créer et/ou démarrer le type de conteneur Yocto dans une fenêtre de terminal :

docker run --rm -it --name=crops-poky -v raspberry:/workdir crops/poky:ubuntu-20.04 --workdir=/workdir

Configuration de l'environnement de construction dans le conteneur

Lorsque le conteneur docker est démarré, vous avez une invite de terminal qui ressemble à ceci : « pokyuser@d4ddfe042587:/workdir ».

Maintenant vous pouvez configurer l'environnement de construction.

Clone poky version

Dans mon cas, j'utilise la version 3.4 de Yocto avec le nom « Honister », car les couches meta-raspberry ne sont pas disponibles pour les versions plus récentes de poky pour le moment. Pour la première fois, vous devez cloner le référentiel poky :

git clone -b honister git://git.yoctoproject.org/poky poky-honister

Si vous voulez mettre à jour poky à la dernière version :

cd poky-honister
git pull --all --prune

Couches méta supplémentaires pour Raspberry Pi

Changer pour « poky-honister » et cloner les dépôts suivants : meta-raspberry, meta-openembedded et si nécessaire meta-qt5

cd poky-honister
git clone -b honister git://git.yoctoproject.org/meta-raspberrypi
git clone -b honister git://git.openembedded.org/meta-openembedded
git clone -b honister https://github.com/meta-qt5/meta-qt5.git

Configurer la construction

Quittez le répertoire poky-honister, pour vous retrouver dans le répertoire /workdir. Maintenant, sourcez l'environnement de construction avec le script oe-init-build-env.

cd ..
source poky-honister/oe-init-build-env rpi-build

Un nouveau répertoire "rpi-build" (vous pouvez le nommer comme vous voulez) et un répertoire conf avec les fichiers bblayers.conf, local.conf et templateconf.cfg est créé.

Comme aucun éditeur de texte n'est installé dans le conteneur, vous devez soit modifier les fichiers de configuration dans le volume samba monté sous Mac OS X, soit installer un éditeur de texte dans le conteneur. Pour ce faire, vous devez ouvrir une deuxième fenêtre de terminal, alors que le conteneur yocto est en cours d'exécution, et lancer un shell bash dans le conteneur avec les privilèges de root :

docker exec -it --user=root crops-poky bash
apt-get install nano
exit

Ensuite, vous pouvez éditer les fichiers de configuration dans le conteneur yocto en tant que pokyuser.

Remarque

L'éditeur n'est pas installé en permanence. Après avoir quitté le conteneur et y être entré à nouveau, vous devez l'installer à nouveau

Ajouter d'abord le meta-raspberry dans le fichier bblayers.conf

nano conf/bblayers.conf

Ajouter « /workdir/poky-honister/meta-raspberrypi \ » pour qu'il ressemble à

BBLAYERS ?= " \
  /workdir/poky-honister/meta \
  /workdir/poky-honister/meta-poky \
  /workdir/poky-honister/meta-yocto-bsp \
  /workdir/poky-honister/meta-raspberrypi \
  "

et enregsitrez-le.

Deuxième modification du fichier local.conf

Editer le fichier local.conf :

nano conf/local.conf

Modifier les lignes suivantes :

  • MACHINE ? ?= "qemux86-64" -> MACHINE ??= "raspberrypi4-64"

En fonction du Raspberry que vous voulez utiliser (raspberrypi0, raspberrypi0w, raspberrypi3, raspberrypi3-64, raspberrypi4, raspberrypi4-64, etc.)

Décommentez les lignes suivantes :

  • DL_DIR ?= "${TOPDIR}/downloads"
  • SSTATE_DIR ?= "${TOPDIR}/sstate-cache"
  • TMPDIR = "${TOPDIR}/tmp"

Ajoutez les lignes suivantes à la fin, pour qu'un sdimg clignote sur une carte SD :

  • IMAGE_FSTYPES = "ext4.xz rpi-sdimg"
  • SDIMG_ROOTFS_TYPE = "ext4.xz"

Enregistrez le fichier local.conf.

Bitbake la première image

Maintenant, vous avez des paramètres minimaux pour construire la première image :

bitbake -k core-image-minimal

Dans la documentation de Yocto, vous trouverez une brève description des descriptions d'images disponibles.

Par exemple :

  • core-image-minimal : une petite image juste capable de permettre à un périphérique de démarrer.
  • core-image-base : une image en mode console uniquement qui prend entièrement en charge le matériel du périphérique cible.
  • core-image-full-cmdline: une image en mode console uniquement avec plus de fonctionnalités complètes du système Linux installées.

Après un certain temps, qui peut être de plusieurs heures pour la première fois, le bitbake se termine et vous trouvez le fichier sdimg dans le répertoire suivant :

/workdir/rpi-build/tmp/deploy/images/raspberrypi4-64

Configurations supplémentaires

Configurations matérielles supplémentaires de Raspberry

Pour définir des paramètres matériels spécifiques, vous pouvez consulter extra-apps.md et extra-build-config.md.Vous trouverez également ces fichiers dans le répertoire meta-raspberrypi/docs.

La couche méta fournit également une configuration d'image « rpi-test-image » à utiliser avec bitbake. L'image est basée sur « core-image-base » qui comprend la plupart des paquets en méta-raspberrypi et certains échantillons de médias.

bitbake -k rpi-test-image

Configurations logicielles supplémentaires

En fonction de la configuration de création d'image que vous utilisez, vous devrez peut-être installer des logiciels supplémentaires.

Vous pouvez le faire en ajoutant des paramètres au fichier local.conf.

Par exemple, ajoutez les lignes suivantes, pour définir ssh-server, pi-user et systemd :

## packages
IMAGE_INSTALL:append = " openssh-sftp-server sudo python3 python3-pip rpi-gpio raspi-gpio"
IMAGE_FEATURES:append = " ssh-server-openssh"

## systemd settings
DISTRO_FEATURES:append = " systemd"
VIRTUAL-RUNTIME:init_manager = "systemd"
VIRTUAL-RUNTIME:initscripts = ""
IMX_DEFAULT_DISTRO_FEATURES:append = " systemd"

Ou ajouter python :

IMAGE_INSTALL:append = " python3 python3-pip rpi-gpio raspi-gpio"

Remarque

L'espace de début dans « python3 python3-pip rpi-gpio raspi-gpio » est important, car le texte est ajouté à la configuration existante et doit être séparé par cet espace.

Licence de copyright

Copyright © 2022 Interelectronix e.K.
Le code source de ce projet est sous licence GPL-3.0.

Remerciements

Sources utilisées pour la création de ces instructions :

Merci à tous.