u-boot configurazione Mender
Stiamo usando il ramo Yocto Kirkstone per lo sviluppo. Supponiamo che tu abbia già un ambiente di sviluppo operativo installato e configuri il tuo ambiente come descritto in VisionFive - Mender - Yocto - Parte 1 e in VisionFive - Mender - Yocto - Parte 2.
u-boot VisionFive board
Il VisionFive RISC-V SBC utilizza due bootloader: un secondoBoot e un u-boot. I meccanismi di funzionamento sono descritti nella Guida rapida di VisionFive SBC.La gestione di questi requisiti significa che
- dobbiamo patchare u-boot da https://github.com/starfive-tech/u-boot con le impostazioni per mender
- dobbiamo eseguire il bitbake di u-boot con yocto
- dobbiamo compilare manualmente u-boot per il caricamento con bootloader di secondo stadio
Applicazione di patch a u-boot
Innanzitutto, clona la derivata di u-boot da starfive-tech per ottenere una base di codice con cui lavorare.
git clone -b JH7100_upstream https://github.com/starfive-tech/u-boot.git
Patch configurata automaticamente da Mender
meta-mender-core in Yocto cerca di patchare automaticamente u-boot per le esigenze Mender se 'MENDER_UBOOT_auto_CONFIGURE = "1"' è impostato. Nella maggior parte dei casi, questo scenario non funziona a causa delle regolazioni dei produttori di schede.
Ma la patch autoconfigurata di Mender è un buon punto di partenza per regolare l'u-boot per VisionFive SOC con il client Mender.
Per ottenere la patch autoconfigurata, è necessario eseguire il bitbake u-boot con l'impostazione MENDER_UBOOT_auto_CONFIGURE = "1":
bitbake u-boot-visionfive
Un file di patch denominato 'mender_auto_configured.patch' viene creato nella directory 'your-build-directory/tmp/work/starfive_visionfive_jh7100-poky-linux/u-boot-visionfive/1_v2022.03-r0'.
Applica patch all'u-boot clonato
Successivamente, applichiamo questo mender_auto_configured.patch al repository di u-boot clonato da starfive-tech.
cd u-boot-starfive
git apply path-to-patch/mender_auto_configured.patch
Personalizza u-boot-starfive
u-boot deve conoscere le variabili Mender per ottenere le informazioni corrette da quale partizione il SOC deve avviarsi dopo aver distribuito un artefatto con il server Mender.
Quindi dobbiamo personalizzare il file 'u-boot-starfive/include/configs/starfive-jh7100.h' per ottenere le variabili Mender e gestire da quale partizione avviare:
#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
Il test '${mender_kernel_root_name}' è il punto e poi decidi quale file uEnv viene preso per caricare il kernel.
Dopo di che, crea una patch completa da u-boot per usarla in Yocto:
git diff --patch > ~/Documents/Yocto/meta-interelectronix-visionfive/recipes-bsp/u-boot/files/0004-u-boot.patch
Includi questa patch in Yocto in 'u-boot-visionfive_%.bbappend':
FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
SRC_URI:append = " \
file://0004-u-boot.patch \
"
bitbake u-boot
In 'u-boot-visionfive_%.bbappend' cambiare MENDER_UBOOT_auto_CONFIGURE = "1" a MENDER_UBOOT_auto_CONFIGURE = "0".
Ora puoi eseguire il bitbake di u-boot senza la funzione di configurazione automatica di mender e con le patch personalizzate:
bitbake u-boot-visionfive
Compila u-boot per il caricamento con il bootloader del secondo stadio
Ora puoi compilare u-boot nella directory 'VisionFive-build/tmp/work/starfive_visionfive_jh7100-poky-linux/u-boot-visionfive/1_v2022.03-r0/git', che contiene le patch aggiunte con 'bitbake u-boot-visionfive'.
- Come compilare u-boot per VisionFive SOC è descritto in Compilazione di u-boot e Kernel
- Come caricare u-boot per VisionFive SOC è descritto inAppendice B: Aggiornamento del firmware e u-boot<
bitbake Yocto Linux
bitbake Yocto Linux con client Mender incluso:
bitbake vision-five-image-mender
Trasmetti l'immagine Linux sulla scheda SD e avvia VISIONFIVE SOC. Se tutto funziona bene, il dispositivo appare come un dispositivo in sospeso nella GUI del server Mender.
In "DEVICES", è possibile accettarlo e includerlo per gestire le distribuzioni di aggiornamenti software successivi per questo dispositivo.
Scopri come creare un artefatto per Mender in VisionFive - Mender - Yocto - Parte 4.
Licenza sul diritto d'autore
Copyright © 2022 Interelectronix e.K.
Questo codice sorgente del Progetto è concesso in licenza sotto la licenza **GPL-3.0 * *.
Parte 1 di una serie di articoli, come impostare un ambiente Yocto per creare un Yocto Linux con l'integrazione di un client Mender.
Parte 2 di una serie di articoli, come impostare un ambiente Yocto per creare un Yocto Linux con l'integrazione di un client Mender.
Parte 4 di una serie di articoli, come impostare un ambiente Yocto per creare un Yocto Linux con l'integrazione di un client Mender.