Inbäddad programvara - Yocto bygga Raspberry Pi 4 en skärmdump av en dator

Yocto-bygge – Raspberry Pi 4

i en dockningsmiljö

Yocto Project guide med öppen källkod

installationstips anpassad Linux på Raspberry Pi med Docker

Yocto Project-guide med öppen källkod för anpassad Linux på Raspberry Pi med installationstips för Docker

Dyk in i Yocto Project för anpassade Linux-system på vilken hårdvara som helst. Perfekt för utvecklare och entusiaster av inbyggda system . Börja bygga nu!

Utforska Yocto Project, ett initiativ med öppen källkod för att skapa anpassade Linux-system för alla hårdvaruarkitekturer. Lär dig att använda CROPS för plattformsoberoende utveckling, konfigurera Docker-containrar och skapa skräddarsydda Linux-avbildningar för inbäddade enheter och IoT-enheter. Vår guide täcker installation på macOS, konfigurering av byggmiljöer och optimering för Raspberry Pi. Oavsett om du är nybörjare eller expert kan du hitta metodtips, verktyg och communitysupport för dina Linux-projektbehov.

Yocto körs i dockningsprogrambehållare

I yocto docs finns ett kapitel (2.2.2) för att konfigurera CROss PlatformS (CROPS) som alternativ till att konfigurera en ursprunglig Linux-PC.Detta alternativ använder dockningsprogrambehållare för att bygga en anpassad systemavbild, t.ex. för Raspberry Pi.

Tyvärr finns det några små misstag i dokumentationen för att konfigurera denna miljö för mig på Mac OS X (Monterey).### Konfigurera dockningsprogrambehållare för Mac OS X

För att använda CROPS-docker på Linux, Windows och Mac OS X krävs några speciella inställningar. Innan du konfigurerar programbehållaren för Yocto måste du skapa en dockningsvolym för att lagra resultaten. En dockare med samba-programbehållare används även för att tillhandahålla filerna i Mac OS X.

# Skapa dockningsvolym

Skriv följande kommandon i ett terminalfönster:

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

# Skapa och kör en samba-programbehållare

OSX låter dig inte ansluta till en lokalt körd samba-partition. Därför måste du först skapa ett alias för 127.0.0.1 i form av 127.0.0.2.

sudo ifconfig lo0 127.0.0.2 alias up

Skapa sedan samba-programbehållaren, som låter dig se filerna i dockningsvolymen:

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

Eftersom du alltid behöver ha alias för att ansluta till samba-programbehållaren, kan du kombinera början av samba och alias på följande sätt:

docker start samba && sudo ifconfig lo0 127.0.0.2 alias up

Nu kan du öppna workdir i filbläddraren. I finder trycker du på "Command-K" och i serverns adressruta skriver du "smb://127.0.0.2/workdir" och klickar på "Connect". Nu bör du se innehållet i dockningsvolymen i finder.

Skapa och starta Yocto-programbehållaren

För att skapa och/eller starta Yocto-programbehållartypen i ett terminalfönster:

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

Konfigurera byggmiljö i programbehållaren

När dockningsprogrambehållaren startas har du en terminalprompt som ser ut så här: "pokyuser@d4ddfe042587:/workdir".

Nu kan du konfigurera byggmiljön.

Klona poky-version

I mitt fall använder jag Yocto-versionen 3.4 med namnet "Honister", eftersom meta-raspberrylagren inte är tillgängliga för nyare poky-versioner just nu. Den första gången måste du klona poky-datakatalogen:

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

Om du vill uppdatera poky till den senaste versionen:

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

# Ytterligare metalager för Raspberry Pi

Ändra till "poky-honister" och klona följande datalager: meta-raspberry, meta-openembedded och vid behov 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

# Konfigurera byggkonfiguration

Lämna poky-honister-katalogen, så att du är i /workdir. Källkoda nu byggmiljön med skriptet oe-init-build-env.

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

En ny katalog "rpi-build" – du kan namnge den som du vill – och en conf-katalog med filerna bblayers.conf, local.conf och templateconf.cfg skapas.

Eftersom det inte finns någon texteditor installerad i programbehållaren, måste du antingen redigera config-filerna i den monterade samba-volymen i Mac OS X eller installera en texteditor i programbehållaren. För att göra detta måste du öppna ett andra terminalfönster – medan yocto-programbehållaren körs – och starta ett bash-skal i programbehållaren med root-rättigheter:

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

Då kan du redigera config-filerna i yocto-programbehållaren som pokyuser.

Obs!

Editorn är inte permanent installerad. Efter att du har lämnat programbehållaren och öppnar den igen måste du installera den på nytt

Lägg först till meta-raspberry i filen bblayers.conf

nano conf/bblayers.conf

Lägg till "/workdir/poky-honister/meta-raspberrypi " så att 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 \
  "

och spara det.

Redigera sedan local.conf

Redigera filen local.conf:

nano conf/local.conf

Ändra följande rader:

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

Beroende på vilken Raspberry du vill använda (raspberrypi0, raspberrypi0w, raspberrypi3, raspberrypi3-64, raspberrypi4, raspberrypi4-64, osv.)

Avkommentera följande rader:

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

Lägg till följande rader i slutet, för att få en sdimg att flasha till ett SD-kort:

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

Spara filen local.conf.

Bitbake den första bilden

Nu har du de minsta inställningarna för att bygga den första bilden:

bitbake -k core-image-minimal

I Yocto-dokumentationen hittar du en kort beskrivning av tillgängliga bildbeskrivningar.

Till exempel:

  • core-image-minimal: En liten bild som bara kan låta en enhet starta.
  • core-image-base: En bild enbart för konsolen som stöder målenhetens hårdvara fullt ut.
  • core-image-full-cmdline: En bild som endast är avsedd för konsoler med fler fullständiga Linux-systemfunktioner installerade.

Efter ett tag – vilket kan vara flera timmar den första gången – är bitbake klar och du hittar sdimg-filen i följande katalog:

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

Extra konfigurationer

Extra hårdvarukonfigurationer för Raspberry

För att konfigurera specifika hårdvaruinställningar kan du titta på extra-apps.md och extra-build-config.md. Du hittar även dessa filer i katalogen meta-raspberrypi/docs.

Metalagret tillhandahåller även en bildkonfiguration "rpi-test-image" att använda med bitbake. Bilden är baserad på "core-image-base" som inkluderar de flesta paketen i meta-raspberrypi och några medieprover.

bitbake -k rpi-test-image

Extra programvarukonfigurationer

Beroende på vilken bildbyggarkonfiguration du använder kan du behöva installera ytterligare programvarupaket.

Du kan göra detta genom att lägga till några inställningar i filen local.conf.

Till exempel kan du lägga till följande rader, för att ställa in ssh-server, pi-user och 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 lägga till python:

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

Obs!

Det första mellanslaget i " python3 python3-pip rpi-gpio raspi-gpio" är viktigt, eftersom texten läggs till i den befintliga konfigurationen och måste separeras med detta mellanslag.

Upphovsrättslicens

Copyright © 2022 Interelectronix e.K.
Detta projekts källkod är licensierad under licensen GPL-3.0.

Tack

Källor som används för att skapa dessa instruktioner:

Tack till alla.