Embedded Software - VisionFive - Mender - Yocto - Teil 3 ein Screenshot eines Computers

VisionFive - Mender - Yocto

Teil 3 - U-Boot-Konfiguration für Mender

U-Boot-Einrichtung, Mender

U-Boot-Konfiguration für 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.

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.

Embedded-Software - VisionFive - Ausbesserer - Yocto ein Screenshot eines Computers
Teil 1 - Grundeinstellung der Yocto-Umgebung

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.

Embedded-Software - VisionFive - Ausbesserer - Yocto ein Screenshot eines Computers
Teil 2 - Grundeinstellung für Integration von Mender

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.

Embedded-Software - VisionFive - Ausbesserer - Yocto ein Screenshot eines Computers
Teil 4 - Erstellung eines Artefakts für Mender

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.