Embedded Software - VisionFive - Mender - Yocto - Deel 3 een screenshot van een computer

VisionFive - Mender - Yocto

Deel 3 - u-boot-configuratie voor Mender

u-boot-instelling Mender

u-boot-configuratie voor Mender

We gebruiken de tak Yocto Kirkstone voor ontwikkeling. We gaan ervan uit dat u al een werkende omgeving heeft geïnstalleerd en uw omgeving hebt ingesteld zoals beschreven in VisionFive - Mender - Yocto - Deel 1 en in VisionFive - Mender - Yocto - Deel 2.

u-boot VisionFive-bord

De VisionFive RISC-V SBC gebruikt twee bootloaders - een secondBoot en u-boot. De mechanismen hoe dit werkt worden beschreven in VisionFive SBC Quick Start Guide. Omgaan met deze eisen betekent dat

  • we u-boot moeten patchen van https://github.com/starfive-tech/u-boot met instellingen voor mender
  • we u-boot met yocto moeten bitbakken
  • we u-boot handmatig moeten compileren voor uploaden met tweede fase bootloader

Patching u-boot

Kloon eerst u-boot afgeleide van starfive-tech om een codebasis te krijgen om mee te werken.

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

meta-mender-core in Yocto probeert u-boot automatisch te patchen voor Mender-behoeften als 'MENDER_UBOOT_AUTO_CONFIGURE = "1"' is ingesteld. In de meeste gevallen werkt dit scenario niet vanwege aanpassingen van de bordfabrikanten.

Maar de automatisch geconfigureerde patch van Mender is een goed startpunt om u-boot voor VisionFive SOC met Mender-client aan te passen.

Om de automatisch geconfigureerde patch te krijgen, moet u u-boot bitbakken met de instelling MENDER_UBOOT_AUTO_CONFIGURE = "1":

bitbake u-boot-visionfive

Een patchbestand genaamd 'mender_auto_configured.patch' wordt aangemaakt in de directory 'your-build-directory/tmp/work/starfive_visionfive_jh7100-poky-linux/u-boot-visionfive/1_v2022.03-r0'.

Patch toepassen op gekloonde u-boot

Vervolgens passen we deze mender_auto_configured.patch toe op de gekloonde u-boot repository van starfive-tech.

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

u-boot moet de Mender-variabelen kennen om de juiste informatie te krijgen van welke partitie het SOC moet opstarten na het implementeren van een artefact met de Mender-server.

Dus we moeten het bestand 'u-boot-starfive/include/configs/starfive-jh7100.h' aanpassen om de Mender-variabelen te krijgen en te beheren van welke partitie u wilt opstarten:

#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}' is het punt en beslis vervolgens welk uEnv-bestand wordt genomen om de kernel te laden.

Maak hierna een complete patch van u-boot voor gebruik in Yocto:

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

Neem deze patch op in Yocto in 'u-boot-visionfive_%.bbappend':

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

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

Wijzig in 'u-boot-visionfive_%.bbappend' MENDER_UBOOT_AUTO_CONFIGURE = "1" in MENDER_UBOOT_AUTO_CONFIGURE = "0".

Nu kunt u u-boot bitbakken zonder de autoconfigure-functie van mender en met de aangepaste patches:

bitbake u-boot-visionfive
Compileer u-boot voor uploaden met tweede fase bootloader

Nu kunt u u-boot compileren in de directory 'VisionFive-build/tmp/work/starfive_visionfive_jh7100-poky-linux/u-boot-visionfive/1_v2022.03-r0/git', die de patches bevat die zijn toegevoegd met 'bitbake u-boot-visionfive'.

bitbake Yocto Linux

bitbake Yocto Linux met inbegrepen Mender-client:

bitbake vision-five-image-mender

Flash het Linux-image naar de SD-kaart en boot de VisionFive SOC. Als alles goed werkt, verschijnt het apparaat als een apparaat in behandeling in de Mender-server GUI.

Onder 'DEVICES' kunt u deze accepteren en opnemen om implementaties van latere software-updates voor dit apparaat te beheren.

Bekijk hoe u een artefact voor Mender maakt in VisionFive - Mender - Yocto - Deel 4.

Auteursrechtlicentie

Copyright © 2022 Interelectronix e.K.
Deze broncode van het project is gelicentieerd onder de GPL-3.0 licentie.

Embedded Software - VisionFive - Mender - Yocto een screenshot van een computer
Deel 1 - Basisopstelling van de Yocto-omgeving

Deel 1 van een serie artikelen, hoe u een Yocto-omgeving instelt om een Yocto Linux te maken met de integratie van een Mender-client.

Embedded Software - VisionFive - Mender - Yocto een screenshot van een computer
Deel 2 - Basisinstelling om Mender op te nemen

Deel 2 van een serie artikelen, hoe u een Yocto-omgeving instelt om een Yocto Linux te maken met de integratie van een Mender-client.

Embedded Software - VisionFive - Mender - Yocto een screenshot van een computer
Deel 4 - Een artefact voor mender maken

Deel 4 van een serie artikelen, hoe u een Yocto-omgeving instelt om een Yocto Linux te maken met de integratie van een Mender-client.