Indlejret software - VisionFive - Mender - Yocto - Del 3 Et skærmbillede af en computer

VisionFive - Mender - Yocto

Del 3 - u-boot-konfiguration til Mender

u-boot opsætning Mender

u-boot-konfiguration til Mender

Vi bruger Yocto Kirkstone-afdelingen til udvikling. Vi antager, at du allerede har et fungerende arbejdsmiljø installeret og indstillet dit miljø som beskrevet i VisionFive - Mender - Yocto - del 1 og iVisionFive - Mender - Yocto - del 2.

u-boot VisionFive board

VisionFive RISC-V SBC bruger to bootloaders - en secondBoot og u-boot. Mekanismerne for, hvordan dette virker, er beskrevet iVisionFive SBC Quick Start Guide.Håndtering af disse krav betyder, at

  • vi er nødt til at patche u-boot fra https://github.com/starfive-tech/u-boot med indstillinger for mender
  • vi skal bitbake u-boot med yocto
  • vi skal kompilere u-boot manuelt til upload med en anden fase bootloader

At patche u-boot

Først skal du klone u-boot afledt fra starfive-tech for at få en kodebase at arbejde med.

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

meta-mender-core i Yocto forsøger at patche u-boot automatisk til Menders behov, hvis 'MENDER_UBOOT_AUTO_CONFIGURE = "1"' er indstillet. I de fleste tilfælde fungerer dette scenario ikke på grund af justeringer af board-producenterne.

Men den autokonfigurerede patch af Mender er et godt udgangspunkt for at justere u-boot for VisionFive SOC med Mender klient.

For at få den autokonfigurerede patch skal du bitbake u-boot med indstillingen MENDER_UBOOT_AUTO_CONFIGURE = "1":

bitbake u-boot-visionfive

En patch-fil med navnet 'mender_auto_configured.patch' oprettes i mappen 'your-build-directory/tmp/work/starfive_visionfive_jh7100-poky-linux/u-boot-visionfive/1_v2022.03-r0'.

Tilføj patch til klonet u-boot

Derefter anvender vi denne mender_auto_configured.patch på det klonede u-boot repository fra starfive-tech.

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

u-boot skal kende Mender-variablerne for at få de korrekte oplysninger fra hvilken partition SOC'en skal starte efter implementering af en artefakt med Mender-serveren.

Så vi er nødt til at tilpasse filen 'u-boot-starfive/include/configs/starfive-jh7100.h' for at få Mender-variablerne og administrere fra hvilken partition der skal bootes:

#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}' er pointen, og beslut derefter, hvilken uEnv-fil der skal bruges til at indlæse kernen.

Efter dette, opret en komplet patch fra u-boot for at bruge det i Yocto:

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

Medtag denne 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' ændres MENDER_UBOOT_AUTO_CONFIGURE = "1" til MENDER_UBOOT_AUTO_CONFIGURE = "0".

Nu kan du bitbake u-boot uden at autokonfigurere funktionen af mender og med de brugerdefinerede patches:

bitbake u-boot-visionfive
Kompilér u-boot til upload med anden fase bootloader

Nu kan du kompilere u-boot i mappen 'VisionFive-build/tmp/work/starfive_visionfive_jh7100-poky-linux/u-boot-visionfive/1_v2022.03-r0/git', som indeholder patches tilføjet med 'bitbake u-boot-visionfive'.

bitbake Yocto Linux

bitbake Yocto Linux med medfølgende Mender-klient:

bitbake vision-five-image-mender

Flash Linux-billedet til SD-kortet, og start VisionFive SOC. Hvis alt fungerer godt, vises enheden som en afventende enhed i Mender-serverens GUI.

Under 'DEVICES' kan du acceptere og inkludere det for at administrere implementeringer af senere softwareopdateringer til denne enhed.

Se hvordan du opretter en artefakt til Mender i VisionFive - Mender - Yocto - del 4.

Ophavsretslicens

Copyright © 2022 Interelectronix e.K.
Denne projektkildekode er licenseret under GPL-3.0-licensen.

Indlejret software - VisionFive - Mender - Yocto et skærmbillede af en computer
Del 1 - Grundlæggende opsætning af Yocto-miljøet

Del 1 af en række artikler, hvordan du opretter et Yocto-miljø til at oprette en Yocto Linux med integration af en Mender-klient.

Indlejret software - VisionFive - Mender - Yocto et skærmbillede af en computer
Del 2 - Grundlæggende opsætning til at omfatte Mender

Del 2 af en række artikler, hvordan du opretter et Yocto-miljø til at oprette en Yocto Linux med integration af en Mender-klient.

Indlejret software - VisionFive - Mender - Yocto et skærmbillede af en computer
Del 4 - Opret en artefakt for mender

Del 4 af en række artikler, hvordan du opretter et Yocto-miljø til at oprette en Yocto Linux med integration af en Mender-klient.