Leitfaden zum Yocto-Projekt mit offenem Quellcode
Open Source Yocto Project Anleitung für benutzerdefiniertes Linux auf Raspberry Pi mit Tipps zur Einrichtung von Docker
Tauchen Sie ein in das Yocto-Projekt für benutzerdefinierte Linux-Systeme auf jeder Hardware. Perfekt für Entwickler und Embedded Systems-Enthusiasten. Fangen Sie jetzt an zu bauen!
Lernen Sie das Yocto-Projekt kennen, eine Open-Source-Initiative zur Erstellung von maßgeschneiderten Linux-Systemen für jede Hardware-Architektur. Lernen Sie, CROPS für die plattformübergreifende Entwicklung zu nutzen, Docker-Container einzurichten und maßgeschneiderte Linux-Images für eingebettete und IoT-Geräte zu erstellen. Unser Leitfaden behandelt die Einrichtung unter macOS, die Konfiguration von Build-Umgebungen und die Optimierung für Raspberry Pi. Egal, ob Sie Anfänger oder Experte sind, hier finden Sie Best Practices, Tools und Community-Support für Ihre Linux-Projekte.
Yocto läuft im Docker-Container
In den Yocto-Dokumenten gibt es ein Kapitel (2.2.2) zum Einrichten von Cross-Plattformen (CROPS) als Alternative zum Einrichten eines nativen Linux-PCs. Diese Alternative verwendet Docker-Container, um ein benutzerdefiniertes System-Image zu erstellen, z. B. für den Raspberry Pi.
Leider gibt es nach meinem Verständnis einige kleine Fehler in der Dokumentation zum Einrichten dieser Umgebung unter Mac OS X (Monterey).
Docker-Container für Mac OS X einrichten
Für die Verwendung des Crops-Dockers unter Linux, Windows und Mac OS X sind einige spezielle Einstellungen erforderlich. Bevor Sie den Container für Yocto einrichten, müssen Sie ein Docker-Datenvolumen erstellen, um die Ergebnisse zu speichern. Auch ein Docker-Container mit Samba wird verwendet, um die Dateien in Mac OS X bereitzustellen.
Docker-Datenvolumen erstellen
Geben Sie in einem Terminalfenster die folgenden Befehle ein:
docker volume create --name raspberry
docker run -it --rm -v raspberry:/workdir busybox chown -R 1000:1000 /workdir
# Erstellen und Ausführen eines Samba-Containers
OSX lässt Sie keine Verbindung zu einer lokal ausgeführten Samba-Freigabe herstellen. Daher müssen Sie zuerst einen Alias für 127.0.0.1 von 127.0.0.2 erstellen.
sudo ifconfig lo0 127.0.0.2 alias up
Erstellen Sie dann den Samba-Container, mit dem Sie die Dateien im Docker-Datenvolumen anzeigen können:
docker create -t --expose 445 -p 127.0.0.2:445:445 --name samba -v raspberry:/workdir crops/samba
Da Sie den Alias immer benötigen, um sich mit dem Samba-Container zu verbinden, können Sie den Start von Samba und Alias so kombinieren:
docker start samba && sudo ifconfig lo0 127.0.0.2 alias up
Nun können Sie workdir im Dateibrowser öffnen. Klicken Sie im Finder auf "Steuerung-K" und im Server-Adressfeld auf "smb://127.0.0.2/workdir" und klicken Sie auf "Verbinden". Nun sollten Sie den Inhalt des Docker-Datenvolumens im Finder sehen.
Erstellen und Starten des Yocto-Containers
Um den Yocto-Container zu erstellen und/oder zu starten, geben Sie in einem Terminalfenster Folgendes ein:
docker run --rm -it --name=crops-poky -v raspberry:/workdir crops/poky:ubuntu-20.04 --workdir=/workdir
Build-Umgebung im Container einrichten
Wenn der Docker-Container gestartet wird, gibt es eine Terminal-Eingabeaufforderung, die wie folgt aussieht: "pokyuser@d4ddfe042587:/workdir".
Jetzt können Sie die Build-Umgebung einrichten.
Poky-Version klonen
In meinem Fall verwende ich Yocto Version 3.4 mit dem Namen "Honister", da die Meta-Raspberry-Layers derzeit nicht für neuere Poky-Versionen verfügbar sind. Beim ersten Mal müssen Sie das Poky-Repository klonen:
git clone -b honister git://git.yoctoproject.org/poky poky-honister
Wenn Sie Poky auf die neueste Version aktualisieren möchten:
cd poky-honister
git pull --all --prune
Zusätzliche Meta-Layers für Raspberry Pi
Wechseln Sie zu "poky-honister" und klonen Sie die folgenden Repositories: meta-raspberry, meta-openembedded und bei Bedarf 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
# Build-Konfiguration einrichten
Verlassen Sie das Poky-Honister-Verzeichnis und gehen Sie zum Verzeichnis /workdir. Beziehen Sie nun die Build-Umgebung mit dem Skript oe-init-build-env.
cd ..
source poky-honister/oe-init-build-env rpi-build
Es wird ein neues Verzeichnis "rpi-build" – Sie können es beliebig benennen – und ein conf-Verzeichnis mit den Dateien bblayers.conf, local.conf und templateconf.cfg erstellt.
Da im Container kein Texteditor installiert ist, müssen Sie entweder die Konfigurationsdateien im gemounteten Samba-Volume in Mac OS X bearbeiten oder einen Texteditor im Container installieren. Dazu müssen Sie ein zweites Terminalfenster öffnen – während der Yocto-Container läuft – und eine Bash-Shell im Container mit Root-Rechten starten:
docker exec -it --user=root crops-poky bash
apt-get install nano
exit
Dann können Sie die Konfigurationsdateien im Yocto-Container als Poky-User bearbeiten.
Hinweis
Der Editor wird nicht permanent installiert. Wenn Sie den Container verlassen und dann erneut Aufrufen, müssen Sie diesen erneut installieren
Fügen Sie der Datei bblayers.conf zuerst das Meta-Raspberry hinzu
nano conf/bblayers.conf
Fügen Sie "/workdir/poky-honister/meta-raspberrypi " hinzu, sodass es wie folgt aussieht
BBLAYERS ?= " \
/workdir/poky-honister/meta \
/workdir/poky-honister/meta-poky \
/workdir/poky-honister/meta-yocto-bsp \
/workdir/poky-honister/meta-raspberrypi \
"
und speichern Sie dann.
Bearbeiten Sie im zweiten Schritt local.conf
Bearbeiten Sie die Datei local.conf:
nano conf/local.conf
Ändern Sie die folgenden Zeilen:
- MACHINE ??= "qemux86-64" -> MACHINE ??= "raspberrypi4-64"
Je nachdem, welches Raspberry Sie verwenden möchten (Raspberrypi0, Raspberrypi0w, Raspberrypi3, Raspberrypi3-64, Raspberrypi4, Raspberrypi4-64, etc.)
Entkommentieren Sie die folgenden Zeilen:
- DL_DIR ?= "${TOPDIR}/Downloads"
- SSTATE_DIR ?= "${TOPDIR}/sstate-cache"
- TMPDIR = "${TOPDIR}/tmp"
Fügen Sie die folgenden Zeilen am Ende hinzu, damit ein sdimg auf einer SD-Karte blinkt:
- IMAGE_FSTYPES = "ext4.xz rpi-sdimg"
- SDIMG_ROOTFS_TYPE = "ext4.xz"
Speichern Sie die Datei local.conf.
Bitbake das erste Image
Jetzt haben Sie minimale Einstellungen, um das erste Image zu erstellen:
bitbake -k core-image-minimal
In der Yocto-Dokumentation finden Sie eine kurze Beschreibung der verfügbaren Image-Beschreibungen.
Zum Beispiel:
- core-image-minimal: Ein kleines Image, das gerade noch in der Lage ist, einem Gerät das Booten zu ermöglichen.
- core-image-base: Ein Image nur für Konsolen, das die Hardware des Zielgeräts vollständig unterstützt.
- core-image-full-cmdline: Ein reines Konsolen-Image mit installierter umfassenderer Linux-Systemfunktionalität.
Nach einer Weile – das kann beim ersten Mal mehrere Stunden beanspruchen – schließt das Bitbake seinen Vorgang ab und Sie finden die sdimg-Datei in folgendem Verzeichnis:
/workdir/rpi-build/tmp/deploy/images/raspberrypi4-64
Zusätzliche Konfigurationen
Extra Raspberry-Hardware-Konfigurationen
Für das Festlegen bestimmter Hardwareeinstellungen finden Sie weitere Informationen auf extra-apps.md und extra-build-config.md. Sie finden diese Dateien auch im Verzeichnis meta-raspberrypi/docs.
Das Meta-Layer bietet außerdem eine Image-Konfiguration "rpi-test-image" zur Verwendung mit Bitbake. Das Image basiert auf "core-image-base", das die meisten Pakete in meta-raspberrypi und einige Medienbeispiele enthält.
bitbake -k rpi-test-image
Zusätzliche Softwarekonfigurationen
Je nachdem, welche Image-Build-Konfiguration Sie verwenden, müssen Sie möglicherweise zusätzliche Softwarepakete installieren.
Sie können dies tun, indem Sie der Datei local.conf einige Einstellungen hinzufügen.
Fügen Sie zum Beispiel die folgenden Zeilen hinzu, um ssh-server, pi-user und systemd festzulegen:
## 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"
Oder fügen Sie Python hinzu:
IMAGE_INSTALL:append = " python3 python3-pip rpi-gpio raspi-gpio"
Hinweis
Das Leerzeichen am Anfang von " python3 python3-pip rpi-gpio raspi-gpio" ist wichtig, da der Text an die vorhandene Konfiguration angehängt wird und mit diesem Leerzeichen getrennt werden muss.
Urheberrechtslizenz
Copyright © 2022 Interelectronix e.K.
Dieser Projekt-Quellcode ist unter der GPL-3.0 Lizenz lizenziert.
Danksagungen
Quellen, die zum Erstellen dieser Anleitung verwendet werden:
Vielen Dank an alle.