Indlejret software - Yocto bygge Raspberry Pi 4 et skærmbillede af en computer

Yocto build Raspberry Pi 4

i et dockermiljø

Yocto Project-vejledning til open source

opsætningstips tilpasset Linux på Raspberry Pi med Docker

Open source Yocto Project-guide til brugerdefineret Linux på Raspberry Pi med Docker-opsætningstips

Dyk ned i Yocto-projektet for brugerdefinerede Linux-systemer på enhver hardware. Perfekt til udviklere og indlejrede systementusiaster . Begynd at bygge nu!

Udforsk Yocto Project, et open source-initiativ til at skabe brugerdefinerede Linux-systemer til enhver hardwarearkitektur. Få mere at vide om at bruge CROPS til udvikling på tværs af platforme, konfigurer Docker-objektbeholdere, og byg skræddersyede Linux-afbildninger til integrerede enheder og IoT-enheder. Vores guide dækker opsætning på macOS, konfiguration af byggemiljøer og optimering til Raspberry Pi. Uanset om du er nybegynder eller ekspert, kan du finde bedste praksis, værktøjer og community-support til dine Linux-projektbehov.

Yocto kører i dockercontainer

I yocto docs er der et kapitel (2.2.2) til opsætning af CROss PlatformS (CROPS) som alternativ til opsætning af en indfødt linux pc.Dette alternativ bruger dockercontainer til at bygge et tilpasset systembillede, f.eks. til Raspberry Pi.

Desværre er der nogle småfejl i dokumentationen for opsætningen af dette miljø for mig på Mac OS X (Monterey).### Opsætning af dockercontainer til Mac OS X

For at bruge CROPS-docker på Linux, Windows og Mac OS X, er der nogle særlige indstillinger, der er nødvendige. Inden du konfigurerer containeren til Yocto, skal du oprette en dockervolume for at gemme resultaterne. Der bruges også en docker-sambacontainer til at levere filerne i Mac OS X.

Opret dokkervolume

I et terminalvindue skal du indtaste følgende kommandoer:

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

Opret og kør en sambacontainer

OSX vil ikke lade dig oprette forbindelse til en lokalt kørende samba-deling. Derfor skal du først oprette et alias til 127.0.0.1 eller 127.0.0.2.

sudo ifconfig lo0 127.0.0.2 alias up

Opret derefter sambacontaineren, der giver dig mulighed for at se filerne i dockervolumen:

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

Da du altid skal have aliaset for at forbinde til sambacontaineren, kan du kombinere starten af samba og alias på denne måde:

docker start samba && sudo ifconfig lo0 127.0.0.2 alias up

Nu kan du åbne arbejdsmappen i filbrowseren. I finderen skal du trykke på "Command-K", og i serverens adressefelt skriver du "smb://127.0.0.2/workdir" og klikker på "Connect". Nu bør du se indholdet af dockervolumen i finderen.

Opret og start Yocto-containeren

Sådan oprettes og/eller startes Yocto-containertypen i et terminalvindue:

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

Opsætning af byggemiljø i containeren

Når dockercontaineren startes, får du en terminalprompt, der ser sådan ud:"pokyuser@d4ddfe042587:/workdir".

Nu kan du indstille byggemiljøet.

Klon poky-version

I mit tilfælde bruger jeg Yocto version 3.4 med navnet "Honister", fordi meta-raspberry-lagene ikke er tilgængelige for nyere poky-versioner på nuværende tidspunkt. Den første gang skal du klone Poky-lagringen:

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

Hvis du vil opdatere poky til den nyeste version:

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

Yderligere metalag til Raspberry Pi

Skift til "poky-honister", og klon følgende datalagre: meta-raspberry, meta-openembedded og om nødvendigt 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

Opsæt build config

Forlad mappen poky-honister, så du er i /workdir. Dan nu byggemiljøet med scriptet oe-init-build-env.

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

En ny mappe "rpi-build" – du kan navngive den som du vil – og en conf-mappe med filerne bblayers.conf, local.conf og templateconf.cfg er blevet oprettet.

Da der ikke er nogen teksteditor installeret i containeren, skal du enten redigere konfigurationsfilerne i den monterede samba-volume i Mac OS X eller installere en teksteditor i containeren. For at gøre dette, skal du åbne et andet terminalvindue – mens yocto-containeren kører – og starte en bash shell i containeren med root-privilegier:

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

Så kan du redigere konfigurationsfilerne i yocto-containeren som pokyuser.

Bemærkning

Editoren er ikke installeret permanent. Når du forlader containeren og går ind igen, skal du installere den igen

Tilføj først meta-raspberry i bblayers.conf-filen

nano conf/bblayers.conf

Tilføj "/workdir/poky-honister/meta-raspberrypi", så det ligner

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

og gem den.

Anden redigering af local.conf

Rediger filen local.conf:

nano conf/local.conf

Ændr følgende linjer:

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

Afhængigt af hvilken Raspberry du ønsker at bruge (raspberrypi0, raspberrypi0w, raspberrypi3, raspberrypi3-64, raspberrypi4, raspberrypi4-64, etc.)

Afkommenter følgende linjer:

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

Tilføj følgende linjer i slutningen for at få en sdimg til at blinke til et SD-kort:

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

Gem local.conf-filen.

####Bitbake det første billede

Nu har du minimale indstillinger til at bygge det første billede:

bitbake -k core-image-minimal

I Yocto-dokumentationen finder du en kort beskrivelse af de tilgængelige billedbeskrivelser. For eksempel:

  • core-image-minimal: Et lille billede, blot i stand til at tillade en enhed at starte.
  • core-image-base: Et consol-only billede, der fuldt ud understøtter målenhedens hardware.
  • core-image-full-cmdline: Et consol-only billede med mere Linux-systemfunktionalitet installeret.

Efter et stykke tid – hvilket kan være adskillige timer første gang – afsluttes bitbake, og du finder sdimg-filen i følgende mappe:

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

Ekstra konfigurationer

Ekstra Raspberry-hardware-konfigurationer

For at indstille specifikke hardwareindstillinger kan du tage et kig på extra-apps.md og extra-build-config.md. Du finder også disse filer i mappen meta-raspberrypi/docs.

Metalaget giver også en billedkonfiguration "rpi-test-image" til brug med bitbake. Billedet er baseret på "core-image-base", som omfatter de fleste pakker i meta-raspberrypi og nogle medieprøver.

bitbake -k rpi-test-image

Ekstra softwarekonfigurationer

Afhængigt af hvilken billedopbygningskonfiguration du bruger, skal du muligvis installere yderligere softwarepakker.

Du kan gøre dette ved at tilføje nogle indstillinger til local.conf-filen.

Tilføj for eksempel følgende linjer for at indstille ssh-server, pi-bruger og 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"

Eller tilføj python:

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

Bemærkning

Mellemrummet i begyndelsen af "python3 python3-pip rpi-gpio raspi-gpio" er vigtigt, fordi teksten tilføjes til den eksisterende konfiguration og skal adskilles med dette mellemrum.

Ophavsretslicens

Copyright © 2022 Interelectronix e.K.
Denne projektkildekode er licenseret under GPL-3.0-licensen.

Anerkendelser