Das Yocto-Projekt ist ein Open-Source-Community-Projekt, das Entwicklern hilft, angepasste Systeme auf der Basis von Linux zu erstellen. Es verfügt über ein zugängliches Toolset, das es allen Entwicklern ermöglicht, mit gemeinsamen Technologien, Software-Stacks und Konfigurationen zusammenzuarbeiten, um Linux-Images zu erstellen. Darüber hinaus ermöglicht yocto Software-Anpassungen und den Austausch zwischen vielen Hardware-Plattformen, sowie wartbare und skalierbare Software-Stacks.
Yocto Überblick
- Erstellen von benutzerdefinierten Embedded Linux;
- Entwicklungs-Workflows - SDK, Devtool, Quilt;
- Poky-Build-System;
- Erstellen von Rezepten mit BitBake;
- BSP & Distro-Schichten.
Poky
Poky ist eine Referenzdistribution des Yocto Projects®. Es enthält das OpenEmbedded Build System (BitBake und OpenEmbedded Core), sowie Metadaten, die Ihnen helfen, Ihre eigene Distribution zu erstellen. Sie können Poky erhalten und es verwenden, um Ihre eigene Distribution mit den Yocto-Projekt-Tools zu erstellen.
Build tools:
- BitBake Tool (bitbake);
- OpenEmbedded-Core (meta);
- Yocto-spezifische Metadaten (meta-yocto);
- Yocto-spezifisches BSP (meta-yocto-bsp)
- Poky_repository
git clone git://git.yoctoproject.org/poky.git
- Openembedded_repo
git clone git://git.openembedded.org/meta-openembedded.git
source oe-init-build-env
bitbake core-image-base
bitbake core-image-minimal
bitbake core-image-sato
bitbake microchip-headless-image
bitbake-graphics-image
Rezepte
Der häufigste Dateityp in einer Yocto-Baubeschreibung ist ein Rezept. Sie enthalten Anweisungen zum Konfigurieren, Kompilieren und Bereitstellen einer bestimmten Software sowie den Ort, an dem sich der Quellcode befindet.BitBake-Rezepte beschreiben, wie ein bestimmtes Paket erstellt wird. Die Quell-URL des Pakets (http, https, ftp, cvs, svn, git, lokales Dateisystem), Abhängigkeiten und Kompilier- oder Installationsoptionen sind in den Rezepten enthalten. Außerdem speichern sie die Metadaten des Pakets in Standardvariablen.
Was steht in einem Rezept?
- Quellcode-URL;
- Git-Zweig und Commit-ID;
- Build-Abhängigkeiten;
- Lizenz;
- Konfigurationsbefehle;
- Kompilierbefehle;
- Installationsbefehle.
Rezepte befinden sich innerhalb von Schichten, einige Beispiele für Rezepte sind recipes-bsp, recipes-core, recipes-connectivity usw.
Wie schreibt man ein Rezept?
- Ebenenverzeichnis - Erstellen Sie zunächst ein Ebenenverzeichnis und nennen Sie es meta_name, z. B. meta-digitalgate.
- Konfigurationsdatei - Zweitens, erstellen Sie innerhalb des Ebenenverzeichnisses ein Konfigurationsverzeichnis mit einer layer.conf-Datei darin: Conf/layer.conf
- Rezeptverzeichnis - Danach erstellen Sie ein Rezeptverzeichnis in der Schicht, z. B. meta-digitalgate/dgate.
- .bb-Datei - Erstellen Sie dann die Bitbake-Rezeptdatei, d. h. meta-digitalgate/dgate/dgate_1.0.bb. Dateiformat: _.bb file
- Terminologie
- ${WORKDIR} -das ist der Ort innerhalb Ihres Builds:
- Build/tmp/work///
- ${PN} - Paketname, d. h. Name des Rezepts. Das Gleiche gilt für Ihre .bb-Datei.
- ${PV} – Paketversion, d. h. Version des Rezepts
- SRC_URI = „Die Datei Ihres Rezepts basiert darauf.“ Dies kann eine .zip .c-Datei oder eine andere Datei sein, die Sie für den Build benötigen.
- Md5, sha256 – diese finden Sie, indem Sie md5sum in cmd eingeben.
Ebenen
Sie sind eine Sammlung von Rezepten, die miteinander verbunden sind. Um Ihren Aufbau zu personalisieren, können Sie Ebenen verwenden, um verwandte Metadaten zusammenzufassen. Bei der Erstellung mehrerer Architekturen werden Informationen auch durch Ebenen getrennt. Die Fähigkeit der Ebenen, frühere Normen außer Kraft zu setzen, ist hierarchisch. Sie können eine beliebige Anzahl von Yocto Project-Ebenen verwenden und den Build personalisieren, indem Sie ihnen Ihre eigenen Ebenen hinzufügen.
Warum wollen Sie eine neue Ebene erstellen?
- Sie können Rezepte für Ihre eigenen Softwareprojekte speichern
- Sie können Ihre eigenen Bilder erstellen
- Sie können Patches/Änderungen an den Rezepten anderer Leute stabilisieren
Was befindet sich in einer Schicht?
Hier haben wir conf, Klassen und Rezepte. Innerhalb des Ordners conf befindet sich die Datei layer.conf, in der wir die Einstellungen für unser Bild ändern können. Unsere Klassen werden bb-Klassen genannt und Sie können auch Ihre eigenen benutzerdefinierten Klassen erstellen. Und wir haben die Rezepte und darin einige Verzeichnisse, die bb-Dateien enthalten (.bb, .bbappend)
Wie erstellt man eine Ebene? Wie kann man Ebenen/benutzerdefinierte Ebenen hinzufügen?
Es gibt einige Befehle zum Erstellen von Ebenen, zum Hinzufügen von Ebenen zum Build und zum Auflisten der Ebenen.
- bitbake-layers create-layer meta-xyz
Mit diesem Befehl wird eine Ebene mit dem Namen erstellt, den Sie als Parameter für den Befehl create angegeben haben.
- bitbake-layers add-layer meta-xyz
Mit diesem Befehl wird die Ebene zum Build hinzugefügt.
- bitbake-layers show-layers
Er zeigt Ihnen die erstellte Ebene und andere Ebenen, die Sie bereits hatten.
Bitbake
BitBake ist eine Kernkomponente des Yocto-Projekts, die Sie verwenden können, um Images mit dem OpenEmbedded-Build-System zu erzeugen. Obwohl BitBake ein wichtiger Teil des Build-Systems ist, wird es unabhängig vom Yocto-Projekt gepflegt.
Es handelt sich um eine allgemeine Aufgabenausführungsmaschine, die es ermöglicht, Shell- und Python-Aufgaben effektiv und parallel auszuführen und dabei komplizierte Abhängigkeiten zwischen den Aufgaben zu beachten. Kurz gesagt, BitBake ist eine Build-Engine, die Aufgaben ausführt, indem sie in einem bestimmten Format definierte Rezepte abarbeitet.
Was sind die gemeinsamen Ziele von BitBake?
- core-image-minimal;
- core-image-sato;
- meta-toolchain;
- meta-ide-support.
Pakete
Im Yocto-Projekt bezieht sich dieser Ausdruck auf die verpackte Ausgabe eines von BitBake erzeugten Rezeptes („gebackenes Rezept"). Die erstellten Binärdateien, die aus den Quellen des Rezepts erzeugt werden, werden normalerweise als Paket bezeichnet. BitBake ist ein Programm, mit dem Sie etwas „backen" können.
Ein weiterer erwähnenswerter Aspekt ist, dass Rezepte innerhalb des Yocto-Projekts früher als Pakete bezeichnet wurden, was die Existenz einiger BitBake-Variablen erklärt, die falsch benannt zu sein scheinen (PR, PV und PE).
Open Embedded Layer Index ist das beste Werkzeug in Yocto, um nach Paketen zu suchen.
Paket-Gruppe
Paketgruppen sind Rezepte, die ausschließlich zum Aufbau von Abhängigkeiten erstellt werden, um die Bilderstellung zu erleichtern.
Eine Sammlung von Paketelementen wird als Paketgruppe bezeichnet. Paketgruppen ermöglichen die Definition typischerweise zusammengehöriger Artikel als eine einzige Einheit, die an einen Tarifcode oder eine Reservierung gebunden sein kann. Ein Bed-and-Breakfast-Paket kann z. B. ein Zimmer und einen Frühstücksservice zu einem bestimmten Preis beinhalten.
BitBake-Pakete
- Abrufen (Herunterladen der Quelle);
- Auspacken (extrahieren);
- Patching (Flicken der lokalen Änderungen);
- Konfigurieren (den Quellcode konfigurieren);
- Inszenieren;
- Installieren (die ausführbare Datei installieren);
- Paketierung (erstellt ein .rpm, .deb).
Und wenn Sie während des Erstellungsprozesses nachschauen, können Sie diese Befehle sehen:
- do_fetch;
- do_unpack;
- do_patch;
- do_configure;
- do_compile;
- do_stage;
- do_install;
- do_package.
QEMU Emulator
QEMU ist ein Open-Source-Emulator, der kostenlos verwendet werden kann. Es verwendet eine dynamische Binärübersetzung, um den Prozessor des Rechners zu imitieren und bietet eine Auswahl an Hardware- und Gerätemodellen für den Rechner, sodass er eine Reihe von Gastbetriebssystemen ausführen kann.
Um eine 64-Bit-Arm-Maschine zu emulieren, führen Sie das Programm qemu-system-aarch64 aus, und um eine 32-Bit-Arm-Maschine zu emulieren, verwenden Sie entweder qemu-system-arm oder qemu-system-aarch64. Im Allgemeinen funktionieren Befehlszeilen, die mit qemu-system-arm funktionieren, auch mit qemu-system-aarch64.
Beispiel für den Aufbau eines Boards
STM32MP157a-DK1 BOARD
Als erstes müssen wir ein Verzeichnis für das Projekt erstellen.
mkdir $HOME/work/stm32mp1
cd $HOME/work/stm32mp1
Zweitens ist es erforderlich, die Pakete für den Build zu besorgen.
Sudo apt install bc build-essential chrpath cpio diffstat gawk git python texinfo wget gdisk
mkdir $HOME/work/stm32mp1
cd $HOME/work/stm32mp1
Herunterladen von Yocto:
git clone git://git.yoctoproject.org/poky.git
cd $HOME/work/stm32mp1/poky
git checkout -b dunfell-23.0.10 dunfell-23.0.10
Danach werden die stm32mp-Schichten hinzugefügt:
cd $HOME/work/stm32mp1
git clone -b dunfell git://git.openembedded.org/meta-openembedded
git clone -b dunfell https://github.com/STMicroelectronics/meta-st-stm32mp.git
Dann richten Sie die Build-Umgebung ein:
cd $HOME/work/stm32mp1
source poky/oe-init-build-env
Aktualisieren Sie anschließend conf/bblayers.conf:
BBLAYERS ?= " \
/home//work/stm32mp1/poky/meta \
/home// work/stm32mp1/poky/meta-poky \
/home// work/stm32mp1/poky/meta-yocto-bsp \
"
BBLAYERS ?= " \
/home/ work/stm32mp1/poky/meta \
/home// work/stm32mp1/poky/meta-poky \
/home// work/stm32mp1/poky/meta-yocto-bsp \
/home// work/stm32mp1/meta-openembedded/meta-oe \
/home// work/stm32mp1/meta-openembedded/meta-python \
/home// work/stm32mp1/meta-st-stm32mp \
"
Dann bauen Sie:
MACHINE=stm32mp1 bitbake core-image-minimal
Und schließlich die Nachbearbeitung:
Nach dem Bau des Boards können Sie es in Betrieb nehmen. Custom Linux wird auf Ihrem Board mit allen Funktionen installiert, die Sie in den Build aufgenommen haben.
Schlussfolgerung
Das Yocto-Build-System besteht hauptsächlich aus Rezepten, Schichten und Konfigurationsdateien, die vom BitBake-Tool analysiert werden, um ein Linux-Dateisystem-Image zu erzeugen, das dann auf der Zielhardware ausgeführt werden kann.
Zusammenfassend lässt sich sagen, dass Yocto Project für eingebettete und IoT-Geräte mit begrenzten Ressourcen geeignet ist. Im Gegensatz zu vollständigen Linux-Distributionen können Entwickler von Embedded-Geräten das Yocto-Projekt nutzen, um eine komprimierte Version für Embedded-Geräte zu erstellen.
Weitere Artikel anschauen:
Proc-Dateisystem in Linux
Das Proc-Dateisystem ist eines der am häufigsten verwendeten simulierten Dateisysteme des Linux-Betriebssystems. Wenn das System neu gestartet wird, wird dieses Dateisystem
OpenRC
OpenRC ist ein abhängigkeitsbasiertes Init-System, das für die Arbeit mit Unix-ähnlichen Betriebssystemen entwickelt wurde. Es hält die Kompatibilität mit dem vom System bereitgestellten Init-System aufrecht, das
Software-Tests
Die Untersuchung der Artefakte und des Verhaltens der zu testenden Software wird als Softwaretest bezeichnet. Außerdem wird ermittelt, ob die tatsächlichen Ergebnisse
Platzierung der Komponenten
Die Platzierung von Bauteilen ist einer der kritischsten Teile des PCB-Designs. Zunächst müssen Sie die grundlegenden Kriterien für die Anordnung von
Linux-Systemprogrammierung
Dieser Artikel konzentriert sich auf Linux -Systemaufrufe und andere Low-Level-Operationen, wie zum Beispiel die Funktionen der C-Bibliothek. Systemprogrammierung ist der Prozess der Erstellung von
EMV-Prüfung
Wenn ein elektrisches Produkt auf elektromagnetische Verträglichkeit (EMV) geprüft wird, wird festgestellt, ob es in der elektromagnetischen Umgebung,