Linux hat sich zu einem zuverlässigen Dienstprogramm zum Erstellen von Betriebssystemen für eingebettete Systeme entwickelt. Die Lernkurve für eingebettete Entwicklungsprogramme kann jedoch ziemlich herausfordernd sein. Viele Menschen, die diese komplexen Tools verwenden, haben viel Zeit damit verbracht, sie zu verstehen und zu beherrschen, und Yocto ist nicht anders. Damit können Sie eine benutzerdefinierte minimale Linux-Distribution für Ihr Embedded-System-Projekt entwickeln.
In diesem Beitrag erfahren Sie Schritt für Schritt, wie Sie mit Yocto beginnen, um eine minimale Linux-Distribution zu erstellen.
Das Yocto-Projekt
Yocto ist ein Open-Source-Kooperationsprojekt, das darauf abzielt, Tools, Vorlagen und Prozesse zu erstellen, die für die Entwicklung benutzerdefinierter Linux-basierter Systeme für eingebettete Systeme trotz der zugrunde liegenden Hardwarearchitektur erforderlich sind. Yocto wurde im März 2011 als Zusammenarbeit von 22 Organisationen ins Leben gerufen, darunter OpenEmbedded, das als Build-System fungiert.
Die Ausgabe des Yocto Project-Builds besteht aus drei Hauptkomponenten:
- Ziel-Laufzeit-Binärdateien: Diese enthält alle Hilfsdateien, die zum Deployment von Linux auf dem Zielsystem benötigt werden. Andere Dateien sind Bootloader, Kernel, Kernel-Module, Root-Dateisystem-Image.
- Paket-Feed: Dies bezieht sich auf die Softwarepakete, die für Ihr System benötigt werden. Sie können auch den Paketmanager auswählen, den Sie für Ihr System benötigen - deb, dnf, ipk usw. Sie können solche Pakete in die Ziel-Laufzeit-Binärdateien einschließen oder sie später dem bereits bereitgestellten System hinzufügen.
- Ziel-SDK: Dies sind die Bibliotheken und Header-Dateien, die das auf dem Ziel installierte System anzeigen. Sie werden hauptsächlich von App-Entwicklern verwendet, um sicherzustellen, dass sie die richtigen Bibliotheken gemäß dem System verknüpfen.
Warum verwenden wir nicht eine bestehende Distribution??
Anfangs verwendeten eingebettete Systeme handelsübliche Distributionen und versuchten, sie an ihre Bedürfnisse anzupassen. Dazu gehörte das Entfernen unnötiger Pakete zur Speicheroptimierung und zur Erhöhung der Sicherheit. Tote Software kann ein System anfällig für verschiedene Angriffsvektoren machen. Trotz dieser Vorteile stellte die Nutzung bestehender Distributionen mehrere Herausforderungen.
Einer davon ist, dass der gesamte Prozess des Zerlegens von Paketen nicht einfach war. Das Entfernen einiger Pakete kann Abhängigkeiten von verschiedenen anderen Paketen aufheben, die für Sie nützlich sein könnten. Darüber hinaus wurden einige Pakete in den Boot- und Laufzeitprozess integriert, was deren Entfernung mühsam machte.
Daher führte die bestehende Distribution oft zu unnötigen Verzögerungen oder einem System, das nicht alle erforderlichen Standards erfüllte.
Lass uns loslegen.
Erstellen Sie Ihre eigene Linux-Distribution mit Yocto
Schritt 1: Hardware- und Betriebssystemanforderungen
- Mindestens 4 GB RAM (je höher, desto besser)
- Neuestes Ubuntu-Betriebssystem (20.04 LTS) oder ein anderes Linux-Betriebssystem:
- Fedora
- openSUSE
- CentOS
- Debian
- Mindestens 100 GB freier Festplattenspeicher (eine größere Größe garantiert eine bessere Leistung). Yocto kann je nach Zielendprodukt recht ressourcenintensiv sein.
Wenn Sie ein macOS- oder Windows-Benutzer sind, verwenden Sie Virtualisierungssoftware wie VMware oder Virtualbox, um eine Linux-Distribution auszuführen. Alternativ können Sie sich für ein Multiboot entscheiden.
Schritt 2: Richten Sie den Host ein
Lassen Sie zuerst die erforderlichen Abhängigkeiten in unserem Hostsystem installieren. Für diesen Beitrag verwende ich die Ubuntu-Distribution. Wenn Sie eine andere Distribution betreiben, lesen Sie bitte die Yocto Project Quick Start-Anleitung und sehen Sie sich an, welche Abhängigkeiten installiert werden müssen.
Starten Sie das Terminal und führen Sie die folgenden Befehle aus:
sudo apt update sudo apt-get install wget git-core entpacken machen gcc g++ build-essential subversion sed autoconf automake texi2html texinfo coreutils diffstat python-pysqlite2 docbook-utils libsdl1.2-dev libxml-parser-perl libgl1-mesa-dev libglu1-mesa-dev xsltproc desktop-file-utils chrpath groff libtool xterm gawk fop
Schritt 3: Klonen Sie den Yocto Poky
Wenn die Abhängigkeiten installiert sind, können wir mit dem Herunterladen von Yocto . fortfahren. Wir werden das Yocto-Repository von der Yocto Project-Website klonen. Führen Sie den folgenden Befehl aus, um die neueste Version herunterzuladen (der „sumo“ -Zweig). Wir werden ein Verzeichnis im Home-Ordner erstellen, um unser Yocto-Projekt für einfachen Zugriff und Konsistenz zu erstellen.
mkdir ~/yocto mkdir ~/yocto/Project-One/ cd ~/Yocto/Project-One/ git clone -b sumo git://git.yoctoproject.org/poky.git
Wenn Sie einen Fehler wie „git-Befehl nicht gefunden.“ Das bedeutet, dass Sie kein Git in Ihrem System installiert haben. Führen Sie den folgenden Befehl aus, um es zu installieren.
sudo apt installieren git
Schritt 4: Initialisieren Sie die gebaute Umgebung.
Um mit Yocto zu beginnen, müssen wir die "Build-Umgebung" initialisieren.' Führe die Befehle unten aus. Der erste ändert das Verzeichnis in den Ordner, den wir gerade geklont haben. Der zweite Befehl initialisiert die 'Build-Umgebung.'
cd ~/Yocto/Project-One/poky source oe-init-build-env build
Sobald die Initialisierung abgeschlossen ist, haben wir ein Build-Verzeichnis und eine Konfigurationsdatei. Das Build-Verzeichnis ist der Ort, an dem der gesamte Systemaufbau stattfindet und die Bilddateien nach Abschluss des Prozesses hostet. Tatsächlich zeigt das Terminal nach der Initialisierung automatisch auf den Build-Ordner. Das sieht man oben im Bild.
Schritt 5: Konfigurieren
Wenn Sie einen ls-Befehl im /build-Verzeichnis ausführen, sehen Sie einen /conf-Ordner, der alle unsere Konfigurationsdateien enthält. Navigieren Sie mit dem folgenden Befehl in diesen Ordner:
$ cd ~/Yocto/Project-One/poky/build/conf/ $ ls
Wenn Sie den Befehl ls im Ordner conf ausführen, sollten Sie das lokale.conf-Datei. Diese Datei gibt die Details des Zielcomputers und des SDK für die gewünschte Zielarchitektur an.
Öffnen Sie diese Datei zum Bearbeiten mit dem folgenden Befehl:
$ sudo nano local.conf
In der Abbildung unten ist die Ziel-Build-Maschine „qemux86-64“.”
Fahren Sie nun mit dem Entkommentieren der folgenden Zeilen fort, wie in der Abbildung unten gezeigt. (Mit Entkommentieren meinen wir -entferne das '#'-Zeichen)
DL_DIR ?= "$TOPDIR/Downloads" SSTATE_DIR ?= "$TOPDIR/sstate-cache" TMPDIR ?= "$TOPDIR/tmp" PACKAGE_CLASSES ?= "package_rpm" SDKMACHINE ?= "i686" EXTRA_IMAGE_FEATURES ?= "debug-tweaks"
Bevor wir mit dem Kompilieren fortfahren, fügen Sie die folgenden Zeilen am Ende des 'local'.conf'-Datei.
BB_NUMBER_THREADS = "X" PARALLEL_MAKE = "-j X"
Ersetzen 'X' mit der doppelten Anzahl von Prozessoren/CPU in Ihrem Computer. Wenn Sie also über vier Prozessoren verfügen, erhalten Sie Aussagen wie diese: BB_NUMBER_THREADS = „8“ PARALLEL_MAKE = „-j 8“
Um die Anzahl der CPUs in Ihrem Computer anzuzeigen, führen Sie den folgenden Befehl aus:
lscpu
Schritt 5: Kompilierungs- und Erstellungsprozess
Um mit dem Erstellen des Images zu beginnen, führen Sie den folgenden Befehl in Ihrem /build-Verzeichnis aus.
bitbake core-image-sato
Das beginnt mit dem Herunterladen und Kompilieren von Paketen für das Zielsystem. Bitte führen Sie den obigen bitbake-Befehl nicht mit Root-Rechten aus, da dies einen Fehler auslöst. Bei einem erstmaligen Build kann der Vorgang bis zu mehreren Stunden dauern (sogar mehr als 2). Manchmal kann bei Bitbake ein Fehler auftreten. Keine Panik; führe den obigen Befehl erneut aus. Der Fehler kann darauf zurückzuführen sein, dass eine bestimmte Website ausfällt oder eine Ressource fehlt.
Die resultierenden Binärimages werden im Verzeichnis /build unter poky/build/tmp/deploy/images/qemux86 gespeichert.
Fazit
Obwohl Yocto in einer einzigen Sitzung ziemlich schwer zu meistern sein kann, ist es ein großartiges Dienstprogramm, um mit der Erstellung einer benutzerdefinierten Linux-Distribution für Ihr Projekt zu beginnen. Ich hoffe, dieser Beitrag hat Ihnen eine detaillierte Anleitung gegeben, wie Sie mit dem gesamten Prozess der Erstellung einer benutzerdefinierten Linux-Distribution beginnen können.