configuration u-boot Mender
Nous utilisons la branche Yocto Kirkstone pour le développement. Nous supposons que vous avez déjà un environnement de développement de travail installé et configuré votre environnement comme décrit dans VisionFive - Mender - Yocto - Partie 1 et dans VisionFive - Mender - Yocto - Partie 2.
u-boot Carte VisionFive
La VisionFive RISC-V SBC utilise deux bootloaders - un second boot et u-boot. Les mécanismes de fonctionnement sont décrits dans le Guide de démarrage rapide VisionFive SBC.La prise en charge de ces exigences signifie que
- nous devons corriger u-boot à partir de https://github.com/starfive-tech/u-boot avec les paramètres pour mender
- on doit faire du bitbake u-boot avec du yocto
- nous devons compiler u-boot manuellement pour le téléchargement avec le chargeur de démarrage de deuxième étape
Corriger u-boot
Tout d'abord, clonez un dérivé de u-boot à partir de starfive-tech pour obtenir une base de code avec laquelle travailler.
git clone -b JH7100_upstream https://github.com/starfive-tech/u-boot.git
Correctif auto-configuré Mender
meta-mender-core dans Yocto tente de patch u-boot automatiquement pour les besoins de Mender si 'MENDER_UBOOT_AUTO_CONFIGURE = "1"' est défini. Dans la plupart des cas, ce scénario ne fonctionne pas en raison des ajustements des fabricants de cartes.
Mais le patch autoconfiguré de Mender est un bon point de départ pour ajuster u-boot pour VisionFive SOC avec le client Mender.
Pour obtenir le correctif auto-configuré, vous devez bitbake u-boot avec le paramètre MENDER_UBOOT_AUTO_CONFIGURE = "1" :
bitbake u-boot-visionfive
Un fichier de patch nommé 'mender_auto_configured.patch' est créé dans le répertoire 'your-build-directory/tmp/work/starfive_visionfive_jh7100-poky-linux/u-boot-visionfive/1_v2022.03-r0'.
Appliquer le patch au u-boot cloné
Ensuite, nous appliquons ce mender_auto_configured.patch au dépôt u-boot cloné de starfive-tech.
cd u-boot-starfive
git apply path-to-patch/mender_auto_configured.patch
Personnalisez u-boot-starfive
u-boot doit connaître les variables Mender pour obtenir les informations correctes à partir de quelle partition le SOC doit démarrer après avoir déployé un artefact avec le serveur Mender.
Nous devons donc personnaliser le fichier 'u-boot-starfive/include/configs/starfive-jh7100.h' pour obtenir les variables Mender et gérer à partir de quelle partition démarrer :
#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
Le test '${mender_kernel_root_name}' est le point, puis décidez quel fichier uEnv est pris pour charger le noyau.
Après cela, créez un patch complet à partir de u-boot pour l'utiliser dans Yocto :
git diff --patch > ~/Documents/Yocto/meta-interelectronix-visionfive/recipes-bsp/u-boot/files/0004-u-boot.patch
Inclure ce patch dans Yocto dans 'u-boot-visionfive_%.bbappend' :
FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
SRC_URI:append = " \
file://0004-u-boot.patch \
"
bitbake u-boot
Dans 'u-boot-visionfive_%.bbappend', changez MENDER_UBOOT_AUTO_CONFIGURE = "1" en MENDER_UBOOT_AUTO_CONFIGURE = "0".
Maintenant, vous pouvez bitbake u-boot sans la fonction d'autoconfiguration de mender et avec les correctifs personnalisés :
bitbake u-boot-visionfive
Compile u-boot pour le téléchargement avec le chargeur de démarrage de deuxième étape
Vous pouvez maintenant compiler u-boot dans le répertoire 'VisionFive-build/tmp/work/starfive_visionfive_jh7100-poky-linux/u-boot-visionfive/1_v2022.03-r0/git', qui contient les patchs ajoutés avec 'bitbake u-boot-visionfive'.
- Comment compiler u-boot pour VisionFive SOC est décrit sous Compilation u-boot et noyau
- Comment télécharger u-boot pour VisionFive SOC est décrit à l' Annexe B° Mise à jour du micrologiciel et u-boot<
bitbake Yocto Linux
bitbake Yocto Linux avec client Mender inclus°:
bitbake vision-five-image-mender
Éclatez l'image Linux sur la carte SD et démarrez le VisionFive SOC. Si tout fonctionne bien, le périphérique apparaît comme un périphérique en attente dans l'interface graphique du serveur Mender.
Sous « APPAREILS », vous pouvez l'accepter et l'inclure pour gérer les déploiements de mises à jour logicielles ultérieures pour cet appareil.
Découvrez comment créer un artefact pour Mender dans VisionFive - Mender - Yocto - Partie 4.
Licence de copyright
Copyright © 2022 Interelectronix e.K.
Le code source de ce projet est sous licence GPL-3.0.
Partie 1 d'une série d'articles, comment configurer un environnement Yocto pour créer un Yocto Linux avec l'intégration d'un client Mender.
Partie 2 d'une série d'articles, comment configurer un environnement Yocto pour créer un Yocto Linux avec l'intégration d'un client Mender.
Partie 4 d'une série d'articles, comment configurer un environnement Yocto pour créer un Yocto Linux avec l'intégration d'un client Mender.