U-Boot-Einrichtung, Mender
Wir nutzen den Yocto-Kirkstone-Zweig für die Entwicklung. Wir gehen davon aus, dass Sie bereits eine funktionierende Entwicklungsumgebung installiert und Ihre Umgebung wie in VisionFive - Mender - Yocto - Teil 1 und in VisionFive - Mender - Yocto - Teil 2 beschrieben eingerichtet haben.
U-Boot VisionFive-Board
VisionFive RISC-V SBC nutzt zwei Bootloader – secondBoot und U-Boot. Die Mechanismen der Funktionsweise werden in VisionFive SBC Quick Start Guide beschrieben.
Um diese Voraussetzungen zu erfüllen...
- müssen wir U-Boot über https://github.com/starfive-tech/u-boot mit Einstellungen für Mender patchen
- müssen wir BitBake für U-Boot mit Yocto nutzen
- müssen wir U-Boot für den Upload mit dem Bootloader der zweiten Stufe manuell kompilieren
U-Boot patchen
Klonen Sie zunächst die U-Boot-Derivate von starfive-tech, um mit einer Codebasis arbeiten zu können.
git clone -b JH7100_upstream https://github.com/starfive-tech/u-boot.git
Mender: automatisch konfigurierter Patch
In Yocto versucht meta-mender-core, U-Boot automatisch für die Anforderungen von Mender zu patchen, wenn folgende Einstellung vorliegt: „MENDER_UBOOT_AUTO_CONFIGURE = "1".“ In den meisten Fällen funktioniert dieses Szenario aufgrund der von Board-Herstellern vorgenommenen Änderungen nicht.
Aber der automatisch konfigurierte Patch von Mender ist ein guter Ausgangspunkt, um U-Boot für VisionFive SoC mit Mender Client anzupassen.
Um den automatisch konfigurierten Patch zu erhalten, müssen Sie BitBake für U-Boot nutzen, dies mit folgender Einstellung: MENDER_UBOOT_AUTO_CONFIGURE = "1":
bitbake u-boot-visionfive
Die Patch-Datei „mender_auto_configured.patch“ wird im Verzeichnis „your-build-directory/tmp/work/starfive_visionfive_jh7100-poky-linux/u-boot-visionfive/1_v2022.03-r0“ erstellt.
Patch auf geklontes U-Boot anwenden
Anschließend wenden wir mender_auto_configured.patch auf das geklonte U-Boot-Repository von starfive-tech an.
cd u-boot-starfive
git apply path-to-patch/mender_auto_configured.patch
Anpassung von u-boot-starfive
U-Boot muss die Mender-Variablen kennen, um die richtigen Informationen darüber zu erhalten, von welcher Partition SoC booten soll, nachdem ein Artefakt mit dem Mender-Server bereitgestellt wurde.
Daher müssen wir die Datei „u-boot-starfive/include/configs/starfive-jh7100.h“ anpassen, um die Mender-Variablen zu erhalten und zu steuern, von welcher Partition gebootet werden soll:
#define STARLIGHT_FEDORA_BOOTENV \
"bootdir=/boot\0" \
"bootenv2=uEnv.txt\0" \
"bootenv3=uEnv3.txt\0" \
"mmcdev=0\0" \
"mmcpart=2\0"
#define CONFIG_EXTRA_ENV_SETTINGS \
MENDER_ENV_SETTINGS \
STARLIGHT_FEDORA_BOOTENV \
"loadaddr=0xa0000000\0" \
"loadbootenv=fatload ${mender_uboot_boot} ${loadaddr} ${bootenv}\0" \
"ext4bootenv2=ext4load ${mender_uboot_root} ${loadaddr} ${bootdir}/${bootenv2}\0" \
"ext4bootenv3=ext4load ${mender_uboot_root} ${loadaddr} ${bootdir}/${bootenv3}\0" \
"importbootenv=echo Importing environment from mmc mender_uboot_dev ${mender_uboot_boot} ...; " \
"env import -t ${loadaddr} ${filesize}\0" \
"mmcbootenv=run mender_setup; " \
"echo mender_kernel_root_name ${mender_kernel_root_name} ...; " \
"echo mender_boot_part_name ${mender_boot_part_name} ...; " \
"setenv bootpart ${mender_uboot_root}; " \
"mmc dev ${mender_uboot_dev}; " \
"if mmc rescan; then " \
"run loadbootenv && run importbootenv; " \
"if test ${mender_kernel_root_name} = /dev/mmcblk0p2; then " \
"run ext4bootenv2 && run importbootenv; " \
"fi; " \
"if test ${mender_kernel_root_name} = /dev/mmcblk0p3; then " \
"run ext4bootenv3 && run importbootenv; " \
"fi; " \
"if test -n $uenvcmd; then " \
"echo Running uenvcmd ...; " \
"run uenvcmd; " \
"fi; " \
"fi\0" \
"fdtfile=" CONFIG_DEFAULT_FDT_FILE "\0" \
BOOTENV \
BOOTENV_SF
Test '${mender_kernel_root_name}' ist der Punkt. Anschließend wird bestimmt, welche uEnv-Datei zum Laden des Kernels verwendet wird.
Erstellen Sie danach einen kompletten Patch von U-Boot zur Nutzung in Yocto:
git diff --patch > ~/Documents/Yocto/meta-interelectronix-visionfive/recipes-bsp/u-boot/files/0004-u-boot.patch
Integrieren Sie diesen Patch in Yocto in „u-boot-visionfive_%.bbappend“:
FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
SRC_URI:append = " \
file://0004-u-boot.patch \
"
U-Boot mit BitBake
Ändern Sie in „u-boot-visionfive_%.bbappend“ MENDER_UBOOT_AUTO_CONFIGURE = "1" zu MENDER_UBOOT_AUTO_CONFIGURE = "0".
Jetzt können Sie BitBake für U-Boot nutzen ohne die Autokonfigurationsfunktion von Mender und mit den benutzerdefinierten Patches:
bitbake u-boot-visionfive
U-Boot für Upload mit Bootloader der zweiten Stufe kompilieren
Jetzt können Sie U-Boot im Verzeichnis „VisionFive-build/tmp/work/starfive_visionfive_jh7100-poky-linux/u-boot-visionfive/1_v2022.03-r0/git“ kompilieren, das die mit „bitbake u-boot-visionfive“ hinzugefügten Patches enthält.
- Wie Sie U-Boot für VisionFive SoC kompilieren, wird beschrieben in U-Boot und Kernel kompilieren
- Wie Sie U-Boot für VisionFive SoC hochladen, wird beschrieben unter Anhang B: Firmware und U-Boot aktualisieren
Yocto-Linux mit BitBake
Nutzen Sie BitBake für Yocto-Linux mit dem enthaltenen Mender Client:
bitbake vision-five-image-mender
Flashen Sie das Linux-Image auf die SD-Karte und booten Sie VisionFive SoC. Wenn alles richtig funktioniert, wird das Gerät als ausstehendes Gerät in der grafischen Benutzeroberfläche des Mender-Servers angezeigt.
Unter „GERÄTE“ können Sie es akzeptieren und integrieren, um die Verwendung späterer Softwareupdates für dieses Gerät zu verwalten.
Erfahren Sie hier, wie Sie ein Artefakt für Mender erstellen: VisionFive - Mender - Yocto - Teil 4.
Urheberrechtslizenz
Copyright © 2022 Interelectronix e.K.
Dieser Projekt-Quellcode ist unter der GPL-3.0 Lizenz lizenziert.
Teil 1 einer Reihe von Artikeln, bei denen es darum geht, wie man eine Yocto-Umgebung einrichtet, um ein Yocto-Linux mit der Integration von Mender Client zu erstellen.
Teil 2 einer Reihe von Artikeln, bei denen es darum geht, wie man eine Yocto-Umgebung einrichtet, um ein Yocto-Linux mit der Integration von Mender Client zu erstellen.
Teil 4 einer Reihe von Artikeln, bei denen es darum geht, wie man eine Yocto-Umgebung einrichtet, um ein Yocto-Linux mit der Integration von Mender Client zu erstellen.