Zum Inhalt springen
Startseite » Yocto-Projekt

Yocto-Projekt

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.
yocto

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)
 
 
Was brauchen Sie, um die bitbake-Umgebung zu starten?
  • Poky_repository 
 start
				
					git clone git://git.yoctoproject.org/poky.git
				
			
  • Openembedded_repo 
 
				
					git clone git://git.openembedded.org/meta-openembedded.git
				
			
 
Nachdem Sie diese Repositories geklont haben, müssen Sie die openembedded-Schicht zu Ihrem Build hinzufügen. Danach können Sie mit den bereits vorhandenen Skripten unter poky die Bitbake-Bauumgebung erstellen:
 
				
					source oe-init-build-env 
				
			
 
  Einige der BitBake-Befehle sind:
 
				
					bitbake core-image-base
bitbake core-image-minimal
bitbake core-image-sato
bitbake microchip-headless-image
bitbake-graphics-image
				
			
 
     Sie können alle diese Befehle verwenden, um Ihren Build zu starten und Ihr Linux-Image zu erstellen.
     

    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?

    1. Ebenenverzeichnis - Erstellen Sie zunächst ein Ebenenverzeichnis und nennen Sie es meta_name, z. B. meta-digitalgate.
    2. Konfigurationsdatei - Zweitens, erstellen Sie innerhalb des Ebenenverzeichnisses ein Konfigurationsverzeichnis mit einer layer.conf-Datei darin: Conf/layer.conf
    3. Rezeptverzeichnis - Danach erstellen Sie ein Rezeptverzeichnis in der Schicht, z. B. meta-digitalgate/dgate.
    4. .bb-Datei - Erstellen Sie dann die Bitbake-Rezeptdatei, d. h. meta-digitalgate/dgate/dgate_1.0.bb. Dateiformat: _.bb file
    5. 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/<username>/work/stm32mp1/poky/meta \
      /home/<username>/ work/stm32mp1/poky/meta-poky \
      /home/<username>/ work/stm32mp1/poky/meta-yocto-bsp \
      "
    
    BBLAYERS ?= " \
      /home/<username> work/stm32mp1/poky/meta \
      /home/<username>/ work/stm32mp1/poky/meta-poky \
      /home/<username>/ work/stm32mp1/poky/meta-yocto-bsp \
      /home/<username>/ work/stm32mp1/meta-openembedded/meta-oe \
      /home/<username>/ work/stm32mp1/meta-openembedded/meta-python \
      /home/<username>/ work/stm32mp1/meta-st-stm32mp \
      "
    
    				
    			

    Dann bauen Sie:

    				
    					MACHINE=stm32mp1 bitbake core-image-minimal
    
    				
    			
    built

    Und schließlich die Nachbearbeitung:

    after build

    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:

    Embedded World 2024

    DigitalGate is excited to announce its forthcoming participation at Embedded World 2024 taking place in Nuremberg from the 9th to the 11th of April.

    Read More »

    Embedded World 2023

    DigitalGate freut sich, seine Teilnahme an der Embedded World 2023 anzukündigen, die vom 14.03. bis 16.03. in Nürnberg stattfindet. Kommen Sie und treffen Sie uns an unserem

    Read More »

    Schreibe einen Kommentar

    Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

    Diese Website ist durch reCAPTCHA geschützt und es gelten die Datenschutzbestimmungen und Nutzungsbedingungen von Google