Software Embarcado - VisionFive - Mender - Yocto - Parte 3 uma captura de tela de um computador

VisionFive – Mender – Yocto

Parte 3 – configuração de u-boot para o Mender

Configuração do u-boot Mender

Configuração de u-boot para o Mender

Estamos usando o ramo do Yocto Kirkstone para desenvolvimento. Assumimos que você já tenha um ambiente de desenvolvimento de trabalho instalado e configure seu ambiente conforme descrito em VisionFive – Mender – Yocto – Parte 1 e em VisionFive – Mender – Yocto – Parte 2.

Placa de u-boot VisionFive

O VisionFive RISC-V SBC usa dois bootloaders: um secondBoot e um u-boot. Os mecanismos para o seu funcionamento são descritos no Guia de Início Rápido do VisionFive SBC.

Lidar com esses requisitos significa que

— temos que fazer patch do u-boot de https://github.com/starfive-tech/u-boot com configurações para o mender — temos que fazer bitbake do u-boot com yocto — temos que compilar o u-boot manualmente para upload com o bootloader do segundo estágio

Fazer patch do u-boot

Primeiro, clone o derivativo do u-boot da starfive-tech para obter uma base de código com a qual trabalhar.

git clone -b JH7100_upstream https://github.com/starfive-tech/u-boot.git
Fazer patch do Mender autoconfigurado

O meta-mender-core no Yocto tenta corrigir o u-boot automaticamente para as necessidades do Mender se "MENDER_UBOOT_auto_CONFIGURE = "1"" estiver definido. Na maioria dos casos, esse cenário não funciona por causa dos ajustes dos fabricantes de placas.

Mas o patch autoconfigurado do Mender é um bom ponto de partida para ajustar o u-boot para o VisionFive SOC com o cliente do Mender.

Para obter o patch autoconfigurado, você precisa fazer bitbake do u-boot com a configuração MENDER_UBOOT_auto_CONFIGURE = "1":

bitbake u-boot-visionfive

Um arquivo de patch chamado "mender_auto_configured.patch" é criado no diretório "your-build-directory/tmp/work/starfive_visionfive_jh7100-poky-linux/u-boot-visionfive/1_v2022.03-r0".

Aplicar patch ao u-boot clonado

Em seguida, aplicamos este mender_auto_configured.patch ao repositório clonado de u-boot da starfive-tech.

cd u-boot-starfive
git apply path-to-patch/mender_auto_configured.patch
Personalizar o u-boot-starfive

O u-boot precisa conhecer as variáveis do Mender para obter as informações corretas de qual partição o SOC deve inicializar após a implementação de um artefato com o servidor do Mender.

Portanto, temos que personalizar o arquivo "u-boot-starfive/include/configs/starfive-jh7100.h" para obter as variáveis do Mender e gerenciar a partir de qual partição inicializar:

#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

O teste '${mender_kernel_root_name}' é o ponto e, em seguida, decida qual arquivo uEnv é usado para carregar o kernel.

Depois disso, crie um patch completo do u-boot para usá-lo no Yocto:

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

Incluir este patch no Yocto em "u-boot-visionfive_%.bbappend":

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

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

Em "u-boot-visionfive_%.bbappend", altere MENDER_UBOOT_auto_CONFIGURE = "1" para MENDER_UBOOT_auto_CONFIGURE = "0".

Agora você pode fazer bitbake do u-boot sem a função de autoconfiguração do mender e com os patches personalizados:

bitbake u-boot-visionfive
Compilar o u-boot para fazer upload com o bootloader do segundo estágio

Agora você pode compilar o u-boot no diretório "VisionFive-build/tmp/work/starfive_visionfive_jh7100-poky-linux/u-boot-visionfive/1_v2022.03-r0/git", que contém os patches adicionados com "bitbake u-boot-visionfive".

— Como compilar o u-boot para o VisionFive SOC está descrito em Compilação de u-boot e Kernel— Como carregar o u-boot para o VisionFive SOC está descrito no Apêndice B: como atualizar o firmware e o u-boot<

Fazer bitbake do Yocto Linux

Faça bitbake do Yocto Linux com o cliente Mender incluído:

bitbake vision-five-image-mender

Passe a imagem do Linux para o cartão SD e inicialize o VisionFive SOC. Se tudo funcionar bem, o dispositivo aparecerá como um dispositivo pendente na GUI do servidor do Mender.

Em "DISPOSITIVOS", você pode aceitá-los e incluí-los para gerenciar implementações de atualizações de software posteriores para este dispositivo.

Veja como criar um artefato para o Mender no VisionFive – Mender – Yocto – Parte 4.

Licença de direitos autorais

Copyright © 2022 Interelectronix e.K.
Este código-fonte do Projeto está licenciado sob a licença * * GPL-3.0 * *.

Software Embarcado - VisionFive - Mender - Yocto uma captura de tela de um computador
Parte 1 — Configuração básica do ambiente do Yocto

Parte 1 de uma série de artigos, como configurar um ambiente do Yocto para criar um Yocto Linux com a integração de um cliente Mender.

Software Embarcado - VisionFive - Mender - Yocto uma captura de tela de um computador
Parte 2 – configuração básica para incluir o Mender

Parte 2 de uma série de artigos, como configurar um ambiente do Yocto para criar um Yocto Linux com a integração de um cliente Mender.

Software Embarcado - VisionFive - Mender - Yocto uma captura de tela de um computador
Parte 4 – criar um artefato para o mender

Parte 4 de uma série de artigos, como configurar um ambiente do Yocto para criar um Yocto Linux com a integração de um cliente Mender.