Configuración de u-boot para Mender
Estamos utilizando la rama Yocto Kirkstone para el desarrollo. Suponemos que ya tiene un entorno de desarrollo operativo instalado y configurado como se describe en VisionFive - Mender - Yocto (parte 1) y en VisionFive - Mender - Yocto (parte 2).
Tarjeta u-boot VisionFive
El VisionFive RISC-V SBC utiliza dos gestores de arranque: un second boot y u-boot. Los mecanismos de funcionamiento se describen en la Guía de inicio rápido de VisionFive SBC.
La gestión de estos requisitos implica que
- tenemos que parchear u-boot desde https://github.com/starfive-tech/u-boot con los parámetros para Mender
- tenemos que ejecutar un bitbake de u-boot con Yocto
- tenemos que compilar u-boot manualmente para la carga con el cargador de arranque de segunda etapa
Parcheo de u-boot
Primero, clone un derivado de u-boot de starfive-tech para obtener una base de código con la que trabajar.
git clone -b JH7100_upstream https://github.com/starfive-tech/u-boot.git
Parche autoconfigurado de Mender
meta-mender-core en Yocto intenta parchear u-boot automáticamente para las necesidades de Mender si se establece 'MENDER_UBOOT_AUTO_CONFIGURE = "1"'. En la mayoría de los casos, este escenario no funciona debido a los ajustes de los fabricantes de tarjetas.
Pero el parche autoconfigurado de Mender es un buen punto de partida para ajustar u-boot para VisionFive SOC con el cliente Mender.
Para obtener el parche autoconfigurado, tiene que ejecutar un bitbake de u-boot con el parámetro MENDER_UBOOT_AUTO_CONFIGURE = "1":
bitbake u-boot-visionfive
Se crea un archivo de parche llamado 'mender_auto_configured.patch' en el directorio 'your-build-directory/tmp/work/starfive_visionfive_jh7100-poky-linux/u-boot-visionfive/1_v2022.03-r0'.
Aplicar parche a u-boot clonado
A continuación, aplicamos este mender_auto_configured.patch al repositorio clonado u-boot de starfive-tech.
cd u-boot-starfive
git apply path-to-patch/mender_auto_configured.patch
Personalice u-boot-starfive
u-boot debe conocer las variables Mender para obtener la información correcta de qué partición debe arrancar el SOC después de implementar un artefacto con el servidor Mender.
Por lo tanto, tenemos que personalizar el archivo 'u-boot-starfive/include/configs/starfive-jh7100.h' para obtener las variables Mender y gestionar desde qué partición arrancar:
#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
La prueba '${mender_kernel_root_name}' es el punto y luego debe decidirse qué archivo uEnv se utiliza para cargar el núcleo.
Después de esto, cree un parche completo desde u-boot para utilizarlo en Yocto:
git diff --patch > ~/Documents/Yocto/meta-interelectronix-visionfive/recipes-bsp/u-boot/files/0004-u-boot.patch
Incluya este parche en Yocto en 'u-boot-visionfive_%.bbappend':
FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
SRC_URI:append = " \
file://0004-u-boot.patch \
"
Ejecute un bitbake de u-boot
En 'u-boot-visionfive_%.bbappend', cambie MENDER_UBOOT_AUTO_CONFIGURE = "1" a MENDER_UBOOT_AUTO_CONFIGURE = "0".
Ahora puede ejecutar un bitbake de u-boot sin la función de autoconfiguración de Mender y con los parches personalizados:
bitbake u-boot-visionfive
Compile u-boot para subir con el cargador de arranque de segunda etapa
Ahora puede compilar u-boot en el directorio 'VisionFive-build/tmp/work/starfive_visionfive_jh7100-poky-linux/u-boot-visionfive/1_v2022.03-r0/git', que contiene los parches añadidos con 'bitbake u-boot-visionfive'.
- En Compilar u-boot y núcleo se describe cómo compilar u-boot para VisionFive SOC.
- En Apéndice B: actualización del firmware y u-boot se describe cómo cargar u-boot para VisionFive SOC.
Ejecute un bitbake de Yocto Linux
Ejecute un bitbake de Yocto para Linux con cliente Mender incluido:
bitbake vision-five-image-mender
Muestre la imagen de Linux a la tarjeta SD y arranque VisionFive SOC. Si todo funciona bien, el dispositivo aparecerá como un dispositivo pendiente en la interfaz gráfica del servidor Mender.
En «DISPOSITIVOS», puede aceptarlo e incluirlo para gestionar las implementaciones de actualizaciones de software posteriores para este dispositivo.
Descubra cómo crear un artefacto para Mender en VisionFive - Mender - Yocto (parte 4).
Licencia de copyright
Copyright© 2022 Interelectronix e.K.
El código fuente de este Proyecto está autorizado en virtud de la licencia GPL-3.0.
Parte 1 de una serie de artículos: Cómo configurar un entorno Yocto para crear un Linux Yocto con la integración de un cliente Mender.
Parte 2 de una serie de artículos: Cómo configurar un entorno Yocto para crear un Linux Yocto con la integración de un cliente Mender.
Parte 4 de una serie de artículos: Cómo configurar un entorno Yocto para crear un Linux Yocto con la integración de un cliente Mender.