Embedded Software - Yocto bouwen Raspberry Pi 4 een screenshot van een computer

Yocto build Raspberry Pi 4

in een dock-omgeving

Open source Yocto Projectgids

installatietips aangepaste Linux op Raspberry Pi met Docker

Open source Yocto Projectgids voor aangepaste Linux op Raspberry Pi met Docker-installatietips

Duik in het Yocto-project voor aangepaste Linux-systemen op elke hardware. Perfect voor ontwikkelaars en liefhebbers van embedded systemen . Begin nu met bouwen!

Verken het Yocto-project, een open-source-initiatief voor het maken van aangepaste Linux-systemen voor elke hardware-architectuur. Leer CROPS te gebruiken voor platformonafhankelijke ontwikkeling, stel Docker-containers in en bouw op maat gemaakte Linux-images voor embedded en IoT-apparaten. Onze gids behandelt de installatie op macOS, het configureren van bouwomgevingen en het optimaliseren voor Raspberry Pi. Of u nu een beginner of een expert bent, vind best practices, tools en community-ondersteuning voor uw Linux-projectbehoeften.

Yocto draait in dockercontainer

In de yocto docs is er een hoofdstuk (2.2.2) voor het instellen van CROss PlatformS (CROPS) als alternatief voor het instellen van een native linux-pc. Dit alternatief maakt gebruik van dockercontainer om een aangepast systeembeeld te bouwen, bijvoorbeeld voor de Raspberry Pi.

Helaas zijn er een aantal kleine fouten in de documentatie voor het opzetten van deze omgeving voor mij op Mac OS X (Monterey).

Instellen dockcontainer voor Mac OS X

Voor het gebruik van de CROPS-docker op Linux, Windows en Mac OS X, zijn er een aantal speciale instellingen nodig. Voordat u de container voor Yocto instelt, moet u een dockervolume maken om de resultaten op te slaan. Ook een docker-samba-container wordt gebruikt om de bestanden in Mac OS X aan te bieden.

Dockervolume maken

Typ in een terminalvenster de volgende opdrachten:

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

Maak en voer een samba-container uit

OSX laat u geen verbinding maken met een lokaal draaiende samba-share. Daarom moet u eerst een alias aanmaken voor 127.0.0.1 van 127.0.0.2.

sudo ifconfig lo0 127.0.0.2 alias up

Maak vervolgens de samba-container aan, waarmee u de bestanden in het dockervolume kunt zien:

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

Omdat u altijd de alias nodig hebt om verbinding te maken met de samba-container, kunt u het begin van samba en alias als volgt combineren:

docker start samba && sudo ifconfig lo0 127.0.0.2 alias up

Nu kunt u de werkmap openen in de bestandsbrowser. Druk in de zoeker op 'Command-K' en typ "smb://127.0.0.2/workdir" in het adresvak van de server en klik op 'Verbinden'. Nu zou u de inhoud van het dockervolume in de zoeker moeten zien.

Maak en start de Yocto-container

Ga als volgt te werk om het type Yocto-container in een terminalvenster aan te maken en/of te starten:

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

Bouwomgeving instellen in de container

Wanneer de dockercontainer wordt gestart, is er een terminalprompt die er als volgt uitziet: 'pokyuser@d4ddfe042587:/workdir'.

Nu kunt u de bouwomgeving instellen.

Kloon poky-versie

In mijn geval gebruik ik de Yocto versie 3.4 met de naam 'Honister', omdat de meta-raspberry-layers op dit moment niet beschikbaar zijn voor nieuwere poky-versies. Voor de eerste keer moet u de poky-repository klonen:

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

Als u poky wilt bijwerken naar de nieuwste versie:

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

# Extra metalayers voor Raspberry Pi

Wijziging in 'poky-honister' en klonen van de volgende repositories: meta-raspberry, meta-openembedded en indien nodig 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

Setup build config

Verlaat de poky-honister-directory, zodat u zich in de /workdir begeeft. Bron nu de bouwomgeving met het script oe-init-build-env.

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

Er wordt een nieuwe directory "rpi-build" aangemaakt - u kunt het noemen zoals u wilt - en een conf directory met de bestanden bblayers.conf, local.conf en templateconf.cfg.

Aangezien er geen teksteditor in de container is geïnstalleerd, moet u de configuratiebestanden in het aangekoppelde samba-volume in Mac OS X bewerken of een teksteditor in de container installeren. Om dit te doen, moet u een tweede terminalvenster openen - terwijl de yocto-container draait - en een bash shell starten in de container met root privileges:

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

Vervolgens kunt u de configuratiebestanden in de yocto-container bewerken als pokyuser.

Opmerking

De editor is niet permanent geïnstalleerd. Na het verlaten van de container en het opnieuw betreden, moet u deze opnieuw installeren

Voeg eerst de meta-raspberry toe in het bestand bblayers.conf

nano conf/bblayers.conf

Voeg "/workdir/poky-honister/meta-raspberrypi " toe zodat het eruit ziet als

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

en sla het op.

Tweede bewerking van de local.conf

Bewerk het bestand local.conf:

nano conf/local.conf

Wijzig de volgende regels:

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

Afhankelijk van welke Raspberry u wilt gebruiken (raspberrypi0, raspberrypi0w, raspberrypi3, raspberrypi3-64, raspberrypi4, raspberrypi4-64, etc)

Reactie op de volgende regels intrekken:

DL_DIR ?= "${TOPDIR}/downloads"

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

Voeg aan het einde de volgende regels toe om een sdimg naar flash op een SD-kaart te zetten:

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

Sla het bestand local.conf op.

Bitbake de eerste image

Nu heeft u minimale instellingen om de eerste image te bouwen:

bitbake -k core-image-minimal

In de Yocto-documentatie vindt u een korte beschrijving van de beschikbare imagebeschrijvingen.

Bijvoorbeeld:

  • core-image-minimal: een kleine image die net in staat is om een apparaat op te starten.
  • core-image-base: een image dat alleen op de console wordt weergegeven en dat de hardware van het doelapparaat volledig ondersteunt.
  • core-image-full-cmdline: Een console-only image met meer full-featured Linux-systeemfunctionaliteit geïnstalleerd.

Na een tijdje - wat voor het eerst seriële uren zouden kunnen zijn - eindigt de bitbake en vindt u het sdimg-bestand in de volgende directory:

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

Extra configuraties

Extra Raspberry-hardwareconfiguraties

Om specifieke hardware-instellingen in te stellen, kunt u kijken naar extra-apps.md en extra-build-config.md. U vindt deze bestanden ook in de directory meta-raspberrypi/docs.

De meta-layer biedt ook een beeldconfiguratie "rpi-test-image" om te gebruiken met bitbake. Het image is gebaseerd op "core-image-base" die de meeste van de pakketten in meta-raspberrypi en sommige mediamonsters omvat.

bitbake -k rpi-test-image

Extra softwareconfiguraties

Afhankelijk van welke image-opbouwconfiguratie u gebruikt, moet u mogelijk extra softwarepakketten installeren.

U kunt dit doen door enkele instellingen toe te voegen aan het local.conf-bestand.

Voeg bijvoorbeeld de volgende regels toe om ssh-server, pi-user en systemd in te stellen:

## 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"

Of voeg python toe:

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

Opmerking

De beginruimte in "python3 python3-pip rpi-gpio raspi-gpio" is belangrijk, omdat de tekst aan de bestaande configuratie wordt toegevoegd en met deze ruimte moet worden gescheiden.

Auteursrechtlicentie

Copyright © 2022 Interelectronix e.K.
Deze broncode van het project is gelicentieerd onder de GPL-3.0 licentie.

Dankbetuigingen

Bronnen die worden gebruikt in om deze instructies te maken:

Iedereen bedankt.