Kapitel 1. Einführung
$ apt install gawk wget git diffstat unzip texinfo gcc-multilib build-essential chrpath socat cpio python python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping libsdl1.2-dev xterm tree $ apt install autoconf libtool libglib2.0-dev libarchive-dev sed cvs subversion coreutils texi2html docbook-utils python-pysqlite2 help2man make gcc g++ desktop-file-utils libgl1-mesa-dev libglu1-mesa-dev mercurial automake groff curl lzop asciidoc u-boot-tools dos2unix mtd-utils pv libncurses5 libncurses5-dev libncursesw5-dev libelf-dev zlib1g-dev bc rename
🛈 Der apt-Paketmanager muss möglicherweise Root-Rechte (sudo) verwenden, um die Pakete zu installieren.
2. Wenn git noch nicht konfiguriert ist:
$ git config --global user.name "Your Name" ① $ git config --global user.email "Your Email" ②
❶ Ändern Sie „Your Name“ in Ihren Namen.
❷ Ändern Sie „Your Email“ in Ihre E-Mail-Adresse.
1.3.2. Repo-Tool abrufen
1. Um das Repo-Manifest von Variscite zu verwenden, muss das Tool repo installiert sein:
$ mkdir ~/bin ① $ curl https://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo $ chmod a+x ~/bin/repo $ export PATH=~/bin:$PATH
❶ Dieser Schritt ist möglicherweise nicht erforderlich, wenn der bin-Ordner bereits existiert.
1.3.3. Yocto Dunfell abrufen
1. Laden Sie die letzte Revision des Dunfell-Manifests von Variscite herunter:
$ mkdir ~/var-fslc-yocto $ cd ~/var-fslc-yocto $ repo init -u https://github.com/varigit/variscite-bsp-platform.git -b dunfell -m default.xml $ repo sync -j$(nproc) ①
❶ Der Schritt der Repo-Synchronisierung kann eine Weile dauern
Kapitel 2. Benutzerdefinierte Yocto-Meta-Schicht
Die Yocto-Schichten sind Repositories, die zugehörige Metadaten (d. h. Anweisungen) enthalten, die dem Yocto-Build-System mitteilen,
wie ein Ziel-Image zu erstellen ist. Das Schichtenmodell des Yocto-Projekts erleichtert die Zusammenarbeit, den Austausch,
die Anpassung und die Wiederverwendung innerhalb der Yocto-Projekt Entwicklungsumgebung.
Schichten trennen Informationen für das Projekt logisch voneinander. Eine Schicht kann zum Beispiel dazu dienen,
alle Konfigurationen für eine bestimmte Hardware zu speichern.
2.1. Eine neue Schicht erstellen
1. Richten Sie die Umgebung für die Erstellung der neuen Schicht ein:
$ cd ~/var-fslc-yocto/ $ MACHINE=imx8mm-var-dart DISTRO=fslc-xwayland . setup-environment build ①
❶ Der obige Befehl ist nur für das erstmalige Build-Setup obligatorisch.
Wenn Sie eine neuere Build-Sitzung neu starten oder ein anderes Terminal verwenden, führen Sie einfach aus:
$ cd ~/var-fslc-yocto/ $ source setup-environment build
a. Erstellen Sie eine Umgebungsvariable für das Quellenverzeichnis:
$ export SDIR=~/var-fslc-yocto/sources/
- Diese Umgebungsvariable wird nur für diese Shell und ihre Kindprozesse gesetzt.
Wird die Shell/Terminal geschlossen und eine neue gestartet, bleibt diese Einstellung nicht erhalten.
2. Verwenden Sie das Skript bitbake-Schichten, um eine neue Schicht im Quellenverzeichnis zu erstellen und hinzuzufügen:
$ cd ~/var-fslc-yocto/build $ bitbake-layers create-layer ../sources/meta-<custom_layer> $ bitbake-layers add-layer ../sources/meta-<custom_layer>
Ersetzen Sie <custom_layer> durch den von Ihnen gewünschten Namen.
3. Dieses Skript erstellt eine minimale Dateistruktur für eine neue Schicht unter
dem unten angegebenen Pfad. Dies kann mit dem Tree-Befehl überprüft werden.
🗁 ~/var-fslc-yocto/sources/meta-<custom_layer>
Untersuchen Sie die Dateistruktur mit dem Befehl tree :
$ tree $(SDIR)/meta-<custom_layer> ├── COPYING.MIT ├── README ├── conf │ └── layer.conf └── recipes-example └── example └── example_0.1.bb
2.1.1. Ein einfaches „Hello, World!“ erstellen Beispielrezept
1. Erstellen Sie ein Verzeichnis zum Hosten der Anwendung in der Metaschicht:
$ cd $SDIR/meta-<custom_layer> $ mkdir -p recipes-<custom_recipe_dir>/hello-world/hello-world
Ersetzen Sie <custom_recipe_dir> durch den von Ihnen gewünschten Namen.
2. Erstellen Sie das Rezept (. bb Datei) für die Anwendung:
$ cd $SDIR/meta-<custom_layer>/recipes-<custom_recipe_dir>/hello-world/ $ touch hello-world_1.0.0.bb
Fügen Sie dann die folgenden Anweisungen in das Rezept ein:
📄 ~/var-fslc-yocto/sources/meta-<custom_layer>/recipes-<custom_recipe_dir>/hello-world/hello-world_1.0.0.bb
SUMMARY = "A simple Hello World application" LICENSE = "MIT" LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302" SRC_URI = "file://hello_world.c" TARGET_CC_ARCH += "${LDFLAGS}" S = "${WORKDIR}" do_compile() { ${CC} -Wall hello-world.c -o hello-world } do_install() { install -d ${D}${bindir} install -m 0755 ${S}/hello-world ${D}${bindir} }
3. Erstellen Sie eine einfache C Programmiersprachen-Quelldatei, die „Hello, World!“ ausgibt :
$ cd $SDIR/meta-<custom_layer>/recipes-<custom_recipe_dir>/hello-world/hello-world/ $ touch hello_world.c
Fügen Sie dann den folgenden Quellcode in die Datei ein
📄 ~/var-flsc-yocto/sources/meta-<custom_layer>/recipes-<custom_recipe>/hello-world/src/hello_world.c
#include <stdio.h> #include <stdlib.h> int main(void) { printf("Hello, World!n"); return EXIT_SUCCESS; }
4. Öffnen Sie die Datei local.conf :
📄 ~/var-fslc-yocto/build/conf/local.conf
Fügen Sie dann die folgende Zeile am Ende der Datei hinzu, um das Paket in jedes Image einzubinden, das Sie als nächstes erstellen:
IMAGE_INSTALL_append = " hello-world"
5. Erstellen Sie das Core-Image-Basis-Image (zum Beispiel):
$ cd ~/var-fslc-yocto/build/ $ bitbake core-image-base ①
❶ Dieser Schritt kann je nach den Spezifikationen Ihres Computers mehrere Stunden in Anspruch nehmen
Die Anwendung „Hello, World!“ wird nach /usr/bin/hello-worldinstalliert, wie in der Funktion do_install() des obigen Rezepts definiert.
Kapitel 3. Benutzerdefinierte Yocto BSP-Schicht
Das folgende Beispiel zeigt, wie man eine benutzerdefinierte BSP-Schicht erstellt.
Der Prozess ist im Grunde derselbe wie bei der im vorherigen Beispiel erstellten Metaschicht.
In einer BSP-Metaschicht ist jedoch eine Maschinenkonfigurationsdatei für die benutzerdefinierte Karte enthalten.
Die Maschinenkonfigurationsdatei wird verwendet, um die Umgebung für die benutzerdefinierte Karte zu konfigurieren.
Dies beinhaltet in der Regel Änderungen am Bootloader und Kernel.
3.1. Eine neue Maschine erstellen
1. Verwenden Sie das Skript bitbake-layers , um eine neue Schicht im Quellenverzeichnis zu erstellen und hinzuzufügen:
$ cd ~/var-fslc-yocto/build $ bitbake-layers create-layer ../sources/meta-<custom_bsp> $ bitbake-layers add-layer ../sources/meta-<custom_bsp>
Ersetzen Sie <custom_bsp> durch Ihren bevorzugten Namen.
2. Erstellen Sie die Maschinenkonfigurationsdatei unter Verwendung der Datei imx8mm-var-dart.conf als Basis:
$ mkdir -p $SDIR/meta-<custom_bsp>/conf/machine $ cd $SDIR/meta-<custom_bsp>/conf/machine $ touch imx8mm-var-dart-<custom_board>.conf
Ersetzen Sie <custom_board> durch den von Ihnen gewünschten Namen.
Die Konfigurationsdatei imx8mm-var-dart.conf, die als Grundlage verwendet wird, befindet sich unter:
📄 ~/var-fslc-yocto/sources/meta-variscite-fslc/conf/machine/imx8mm-var-dart.conf
Fügen Sie den folgenden Inhalt in die soeben erstellte Konfigurationsdatei ein:
📄 ~/var-fslc-yocto/sources/meta-<custom_bsp>/conf/machine/imx8mm-var-dart-<custom_board>.conf
require conf/machine/imx8mm-var-dart.conf MACHINEOVERRIDES_EXTENDER_imx8mm-var-dart-<custom_board> = "imx8mm-var-dart"
Der resultierende MACHINEOVERRIDES-Wert lautet:
MACHINEOVERRIDES="aarch64:imx:use-nxp-bsp:mx8:mx8m:imxdrm:imxvpu:imxgpu:imxgpu2d:imxgpu3d:mx8mm:imx8mm-var-dart:imx8mm-var-dart-<custom_board>"
3. Um einen neuen Gerätebaum (dtb) zu verwenden, fügen Sie die folgende Zeile am Ende der Datei imx8mm-var-dart-<custom_board>.conf ein:
KERNEL_DEVICETREE = " freescale/imx8mm-var-dart-<custom_board>.dtb "
Natürlich müssen Sie dem Kernel-Quellbaum auch die eigentliche Gerätebaum-Quelldatei (dts) hinzufügen.
Sie können entweder das Kernel-Rezept anpassen, um Ihre Gerätebaum-Quelldatei als Patch hinzuzufügen,
oder Ihre eigene Kopie des Kernel-Repositorys mit Ihren Änderungen verwenden. Um das Kernelrezept anzupassen,
können Sie eine bbappend-Datei zu Ihrer eigenen BSP-Schicht hinzufügen, die Sie gerade erstellt haben. Zum Beispiel:
📄 ~/var-fslc-yocto/sources/meta-<custom_bsp>/recipes-kernel/linux/linux-variscite_%.bbappend
4. Die Dateistruktur sollte wie folgt aussehen:
$ tree $SDIR/meta-<custom_bsp> . ├── conf │ ├── layer.conf │ └── machine │ └── imx8mm-var-dart-<custom_board>.conf ├── COPYING.MIT ├── README └── recipes-example └── example └── example_0.1.bb
3.2. Erstellen des benutzerdefinierten Bildes
1. Ändern Sie die MACHINE in der lokalen Konfigurationsdatei (local.conf):
📄 ~/var-fslc-yocto/build/conf/local.conf
a. Ändern Sie imx8mm-var-dart:
MACHINE ??= 'imx8mm-var-dart'
b. Zu imx8mm-var-dart-<custom_board>:
MACHINE ??= 'imx8mm-var-dart-<custom_board>'
2. Führen Sie den Befehl bitbake aus:
$ cd ~/var-fslc-yocto/build/ $ bitbake core-image-base ①
❶ Dieser Schritt kann je nach den Spezifikationen Ihres Computers mehrere Stunden in Anspruch nehmen
Dies erzeugt eine .wic Datei für das benutzerdefinierte Board Image:
📄 ~/var-fslc-yocto/build/tmp/deploy/images/imx8mm-var-dart-<custom_board>/core-image-base-imx8mm-vardart-<
custom_board>.wic
3.3. Flashen Sie das benutzerdefinierte Image auf die SD-Karte
1. So flashen Sie das benutzerdefinierte Board-Image:
$ cd ~/var-fslc-yocto/build/tmp/deploy/images/imx8mm-var-dart-<custom_board>/ $ zcat core-image-base-imx8mm-var-dart-<custom_board>.wic.gz | sudo dd of=/dev/sdX bs=1M status=progress conv=fsync ①
❶ Stellen Sie sicher, dass Sie den richtigen Pfad zur SD-Karte anstelle von /dev/sdX ( z.B. /dev/sdb ) verwenden . Um dies zu überprüfen, verwenden Sie den Befehl lsblk .
SEIEN SIE VORSICHTIG, dass Sie nicht den Pfad zur primären Festplatte verwenden – er kann das Host-Betriebssystem überschreiben.
2. Nach diesen Schritten setzen Sie die SD-Karte in das Custom Board ein und schalten es ein, um das Custom BSP zu starten.
Erweiterte Überwachung und Over-the-Air (OTA)-Updates für eingebettete Geräte
Die Integration mit der Plattform von Memfault erweitert die Lösungen von Variscite um fortschrittliche Diagnosefunktionen. Entwicklungsteams erhalten Zugriff auf wertvolle Daten von Endgeräten, wie etwa Leistungsmetriken, Systemereignisse und Betriebsstatistiken, ohne dass ein physischer Zugriff erforderlich ist. Diese Transparenz ermöglicht eine proaktive Wartung und ermöglicht Ingenieuren, Probleme zu erkennen und zu beheben, ohne auf das Feedback der Endbenutzer angewiesen zu sein.
Systematisches Risikomanagement: Probleme verhindern, bevor sie auftreten