Inbäddad programvara - VisionFive - Mender - Yocto - Del 3 En skärmdump av en dator

VisionFive – Mender – Yocto

Del 3 – Konfiguration av u-boot för Mender

Konfiguration av u-boot för Mender

Konfiguration av u-boot för Mender

Vi använder Yocto Kirkstone-grenen för utveckling. Vi förutsätter att du redan har en fungerande utvecklingsmiljö som är konfigurerad enligt beskrivningen i VisionFive – Mender – Yocto – Del 1 och i VisionFive – Mender – Yocto – Del 2.

u-boot VisionFive-kort

VisionFive RISC-V SBC använder två bootloader – en secondBoot och u-boot. Mekanismerna för hur detta fungerar beskrivs i VisionFive SBC snabbstartguide.Hantering av dessa krav innebär att

  • Vi måste korrigera u-boot från https://github.com/starfive-tech/u-boot med inställningar för Mender.
  • Vi måste bitbake och u-boot med Yocto.
  • Vi måste kompilera u-boot manuellt för uppladdning med andra stadiets bootloader.

Patcha u-boot

Först ska du klona u-boot-derivat från starfive-tech för att få en kodbas att arbeta med.

git clone -b JH7100_upstream https://github.com/starfive-tech/u-boot.git
Mender autokonfigurerad patch

meta-mender-core i Yocto försöker korrigera u-boot automatiskt för Mender om MENDER_UBOOT_AUTO_CONFIGURE = "1" är inställt. I de flesta fall fungerar inte detta scenario på grund av justeringar av korttillverkarna.

Men den autokonfigurerade patchen av Mender är en bra utgångspunkt för att justera u-boot för VisionFive SOC med Mender-klient.

För att få den autokonfigurerade patchen måste du bitbake u-boot med inställningen MENDER_UBOOT_AUTO_CONFIGURE = "1":

bitbake u-boot-visionfive

En patchfil med namnet "mender_auto_configured.patch" skapas i katalogen "your-build-directory/tmp/work/starfive_visionfive_jh7100-poky-linux/u-boot-visionfive/1_v2022.03-r0".

Tillämpa patch på klonad u-boot

Härnäst tillämpar vi denna mender_auto_configured.patch på den klonade datakatalogen u-boot från starfive-tech.

cd u-boot-starfive
git apply path-to-patch/mender_auto_configured.patch
Anpassa u-boot-starfive

u-boot måste känna till Mender-variablerna för att få rätt information från vilken partition SOC ska starta efter distribution av en artefakt med Mender-servern.

Så vi måste anpassa filen "u-boot-starfive/include/configs/starfive-jh7100.h" för att få Mender-variablerna och hantera från vilken partition den ska starta:

#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

Testa '${mender_kernel_root_name}' och bestäm sedan vilken uEnv-fil som ska användas för att ladda kärnan.

Efter detta skapar du en komplett patch från u-boot för att använda den i Yocto:

git diff --patch > ~/Documents/Yocto/meta-interelectronix-visionfive/recipes-bsp/u-boot/files/0004-u-boot.patch

Inkludera denna patch i Yocto i "u-boot-visionfive_%.bbappend":

FILESEXTRAPATHS:prepend := "${THISDIR}/files:"

SRC_URI:append = " \
    file://0004-u-boot.patch \
"
bitbake u-boot

I "u-boot-visionfive_%.bbappend" ändrar du MENDER_UBOOT_AUTO_CONFIGURE = "1" till MENDER_UBOOT_AUTO_CONFIGURE = "0".

Nu kan du bitbake u-boot utan funktionen för att automatiskt konfigurera mender och med anpassade patchar:

bitbake u-boot-visionfive
Kompilera u-boot för uppladdning med bootloader i andra steget

Nu kan du kompilera u-boot i katalogen "VisionFive-build/tmp/work/starfive_visionfive_jh7100-poky-linux/u-boot-visionfive/1_v2022.03-r0/git", som innehåller patchar tillagda med "bitbake u-boot-visionfive".

bitbake Yocto Linux

bitbake Yocto Linux med inkluderad Mender-klient:

bitbake vision-five-image-mender

Flasha Linux-avbildningen till SD-kortet och starta VisionFive SOC. Om allt fungerar bra visas enheten som en väntande enhet i Mender-serverns grafiska gränssnitt.

Under "DEVICES" kan du acceptera och inkludera den för att hantera distributioner av senare programuppdateringar för den här enheten.

Se hur du skapar en artefakt för Mender i VisionFive – Mender – Yocto – Del 4.

Upphovsrättslicens

Copyright © 2022 Interelectronix e.K.
Detta projekts källkod är licensierad under licensen GPL-3.0.

Inbäddad programvara - VisionFive - Mender - Yocto en skärmdump av en dator
Del 1 – Grundläggande konfiguration av Yocto-miljön

Del 1 av en serie artiklar, hur du konfigurerar en Yocto-miljö för att skapa en Yocto Linux med integration av en Mender-klient.

Inbäddad programvara - VisionFive - Mender - Yocto en skärmdump av en dator
Del 2 – Grundläggande konfiguration för att inkludera Mender

Del 2 av en serie artiklar, hur du konfigurerar en Yocto-miljö för att skapa en Yocto Linux med integration av en Mender-klient.

Inbäddad programvara - VisionFive - Mender - Yocto en skärmdump av en dator
Del 4 – Skapa en artefakt för Mender

Del 4 av en serie artiklar, hur du konfigurerar en Yocto-miljö för att skapa en Yocto Linux med integration av en Mender-klient.