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.