Innebygd programvare - Yocto bygge Raspberry Pi 4 et skjermbilde av en datamaskin

Yocto bygger Raspberry Pi 4

i et dokkermiljø

Yocto-prosjektveiledning med åpen kildekode

oppsettstips tilpasset Linux på Raspberry Pi med Docker

Yocto Project-veiledning med åpen kildekode for tilpasset Linux på Raspberry Pi med Docker-oppsetttips

Dykk inn i Yocto-prosjektet for tilpassede Linux-systemer på hvilken som helst maskinvare. Perfekt for utviklere og innebygde systementusiaster . Begynn å bygge nå!

Utforsk Yocto Project, et åpen kildekode-initiativ for å lage tilpassede Linux-systemer for enhver maskinvarearkitektur. Lær å bruke CROPS til utvikling på tvers av plattformer, konfigurer Docker-beholdere og bygg skreddersydde Linux-avbildninger for innebygde enheter og IoT-enheter. Vår guide dekker oppsett på macOS, konfigurering av byggemiljøer og optimalisering for Raspberry Pi. Enten du er nybegynner eller ekspert, finn anbefalte fremgangsmåter, verktøy og fellesskapsstøtte for Linux-prosjektbehovene dine.

Yocto kjører i dokkercontainer

I yocto docs er det et kapittel (2.2.2) for å sette opp CROss PlatformS (CROPS) som alternativ til å sette opp en native linux pc. Dette alternativet bruker dokercontaineren til å bygge et tilpasset systembilde, f.eks. for Raspberry Pi.

Dessverre er det noen små feil i dokumentasjonen for å sette opp dette miljøet for meg på Mac OS X (Monterey).### Sett opp dokkercontainer for Mac OS X

For å kunne bruke CROPS-dokkeren på Linux, Windows og Mac OS X, trengs det noen spesielle innstillinger. Før du konfigurerer containeren for Yocto, må du opprette et dokkervolum for å lagre resultatene. En dokker samba container brukes også til å levere filene i Mac OS X.

Opprett dokkervolum

I et terminalvindu skriver du inn følgende kommandoer:

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

Opprett og kjør en samba-container

OSX lar deg ikke koble til en lokalt kjørende samba- ressurs. Derfor må du først opprette et alias for 127.0.0.1 av 127.0.0.2.

sudo ifconfig lo0 127.0.0.2 alias up

Opprett deretter samba-containeren, som lar deg se filene i dokkervolumet:

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

Siden du alltid må ha aliaset for å koble til samba-containeren, kan du kombinere starten på samba og alias slik:

docker start samba && sudo ifconfig lo0 127.0.0.2 alias up

Nå kan du åpne arbeidsmappen i filnettleseren. I søkeren trykker du på "Command-K" og i serveradresseboksen skriver du "smb://127.0.0.2/workdir" og klikker "Connect". Nå bør du se innholdet i dokkervolumet i søkeren.

Opprett og start Yocto-containeren

For å opprette og/eller starte Yocto-containertypen i et terminalvindu:

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

Sett opp byggemiljø i containeren

Når dockercontaineren startes, har du en terminalprompt som ser slik ut: "pokyuser@d4ddfe042587:/workdir".

Nå kan du sette opp byggemiljøet.

Klone poky-versjon

I mitt tilfelle bruker jeg Yocto-versjon 3.4 med navnet "Honister", fordi meta-raspberry-lagene ikke er tilgjengelige for nyere Poky-versjoner på dette tidspunktet. For den første gangen må du klone poky-arkivet:

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

Hvis du vil oppdatere poky til den nyeste versjonen:

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

# Ekstra metalag for Raspberry Pi

Bytt til «poky-honister» og klon følgende lagre: meta-raspberry, meta-openembedded og om nødvendig 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

# Konfigurer byggekonfigurasjon

Forlat poky-honister-katalogen, slik at du er i /workdir. Nå kan du bygge opp kildemiljøet med skriptet oe-init-build-env.

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

En ny katalog "rpi-build" som du kan navngi som du vil, og en konf mappe med filene bblayers.conf, local.conf og templateconf.cfg opprettes.

Siden det ikke er installert noe tekstredigeringsprogram i containeren, må du enten redigere oppsettsfilene i det monterte samba-volumet i Mac OS X eller installere et tekstredigeringsprogram i containeren. For å gjøre dette, må du åpne et andre terminalvindu, mens yocto-containeren kjører, og starte et bash-skall i containeren med root-rettigheter:

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

Da kan du redigere konfigurasjonsfilene i yocto-containeren som pokyuser.

Merknad

Redigeringsprogrammet er ikke permanent installert. Etter at du har forlatt containeren og gått inn igjen, må du installere den på nytt

# Legg først til meta-raspberry i bblayers.conf-filen

nano conf/bblayers.conf

Legg til "/workdir/poky-honister/meta-raspberrypi " slik at det ser ut som

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

og lagre den.

Andre redigering av local.conf

Rediger filen local.conf:

nano conf/local.conf

Endre følgende linjer:

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

Avhengig av hvilket raspberry du vil bruke (raspberrypi0, raspberrypi0w, raspberrypi3, raspberrypi3-64, raspberrypi4, raspberrypi4-64, etc)

Fjern kommentar på følgende linjer:

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

Legg til følgende linjer på slutten, for å få en sdimg til å blinke til et SD-kort:

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

Lagre filen local.conf.

Bitbake the first image

Nå har du minimale innstillinger for å bygge det første bildet:

bitbake -k core-image-minimal

I Yocto-dokumentasjonen finner du en kort beskrivelse av de tilgjengelige bildebeskrivelsene. For eksempel:

  • core-image-minimal: Et lite bilde som bare er i stand til å tillate en enhet å starte opp.
  • core-image-base: Et konsoll-bilde som støtter målenhetens maskinvare fullt ut.
  • core-image-full-cmdline: Et konsollbilde med mer fullverdig Linux-systemfunksjonalitet installert.

Etter en stund, som kan være servertimer for første gang, er bitbake ferdig og du finner sdimg-filen i følgende katalog:

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

Ekstra konfigurasjoner

Ekstra Raspberry-maskinvarekonfigurasjoner

Hvis du vil angi spesifikke maskinvareinnstillinger, kan du se på extra-apps.md og extra-build-config.md.Du finner også disse filene i katalogen meta-raspberrypi/docs.

Metalaget gir også en bildekonfigurasjon "rpi-test-image" som kan brukes med bitbake. Bildet er basert på "core-image-base" som inkluderer de fleste pakkene i meta-raspberrypi og noen medieprøver.

bitbake -k rpi-test-image

Ekstra programvarekonfigurasjoner

Avhengig av hvilken bildebyggingskonfigurasjon du bruker, må du kanskje installere flere programvarepakker.

Du kan gjøre dette ved å legge til noen innstillinger i filen local.conf.

For eksempel legg til følgende linjer, for å angi ssh-server, pi-bruker 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 legg til python:

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

Merknad

Begynnelsesrommet i

« python3 python3-pip rpi-gpio raspi-gpio» er viktig, fordi teksten legges til eksisterende konfigurasjon og må skilles med dette rommet.

Opphavsrettslisens

Copyright © 2022 Interelectronix e.K.
Denne Project-kildekoden er lisensiert under GPL-3.0 -lisensen.

Anerkjennelser

Kilder som brukes til å opprette denne instruksjonen:

Takk til alle.