Software embebido - VisionFive - Mender - Yocto - Parte 3 una captura de pantalla de una computadora

VisionFive - Mender - Yocto

Parte 3: Configuración de u-boot para Mender

Configuración de u-boot para Mender

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'.

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.

Software embebido - VisionFive - Mender - Yocto una captura de pantalla de un ordenador
Parte 1: Configuración básica del entorno Yocto

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.

Software embebido - VisionFive - Mender - Yocto una captura de pantalla de un ordenador
Parte 2: Configuración básica para incluir 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.

Software embebido - VisionFive - Mender - Yocto una captura de pantalla de un ordenador
Parte 4: Crear un artefacto para 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.