임베디드 소프트웨어 - VisionFive - Mender - Yocto - Part 3 컴퓨터 스크린샷

VisionFive - Mender - Yocto

파트 부 - Mender용 u-boot 구성

u-boot 설정 Mender

Mender용 u-boot 구성

저희는 개발에 Yocto Kirkstone 브랜치를 사용하고 있습니다. VisionFive - Mender - Yocto - 파트 1VisionFive - Mender - Yocto - 파트 2에서 설명한 대로 이미 작업 개발 환경을 설치하고 환경을 설정했다고 가정합니다.

u-boot VisionFive 보드

VisionFive RISC-V SBC는 2개의 부트로더(secondBoot 및 u-boot)를 사용합니다. 메커니즘은 VisionFive SBC 빠른 시작 가이드에 설명되어 있습니다.

이러한 요구 사항을 처리한다는 것은 다음을 의미합니다.

  • https://github.com/starfive-tech/u-boot에서 u-boot를 mender용 설정으로 패치해야 합니다
  • yocto로 u-boot를 비트베이크해야 합니다
  • 2단계 부트로더로 업로드하려면 u-boot를 수동으로 컴파일해야 합니다

u-boot 패치

먼저, starfive-tech의 u-boot 파생 항목을 복제하여 사용할 코드 기반을 얻습니다.

git clone -b JH7100_upstream https://github.com/starfive-tech/u-boot.git
Mender 자동 구성 패치

Yocto의 meta-mender-core는 'MENDER_UBOOT_AUTO_CONFIGURE = "1"'이 설정된 경우 Mender 니즈에 따라 자동으로 u-boot 패치를 시도합니다. 대부분의 경우, 이 시나리오는 보드 제조업체의 조정으로 인해 작동하지 않습니다.

그러나 Mender의 자동 구성 패치는 Mender 클라이언트를 사용하여 VisionFive SOC에 대한 u-boot를 조정하기 시작하는 데 사용하기에 좋습니다.

자동 구성 패치를 얻으려면 MENDER_UBOOT_AUTO_CONFIGURE = "1" 설정으로 u-boot를 비트베이크해야 합니다:

bitbake u-boot-visionfive

'your-build-directory/tmp/work/starfive_visionfive_jh7100-poky-linux/u-boot-visionfive/1_v2022.03-r0' 디렉토리에 'mender_auto_configured.patch'라는 패치 파일이 생성됩니다.

복제된 u-boot에 패치 적용

그 다음, starfive-tech에서 복제된 u-boot 저장소에 이 mender_auto_configured.patch를 적용합니다.

cd u-boot-starfive
git apply path-to-patch/mender_auto_configured.patch
u-boot-starfive 사용자 정의

u-boot의 경우, Mender 서버에 아티팩트를 배포한 후 SOC가 부팅해야 하는 올바른 정보를 얻기 위해 Mender 변수를 알아야 합니다.

따라서 'u-boot-starfive/include/configs/starfive-jh7100.h' 파일을 사용자 정의하여 Mender 변수를 가져오고 부팅할 파티션을 관리해야 합니다:

#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

테스트 '${mender_kernel_root_name}'이 중요하며, 그 다음, 커널을 로드하기 위해 어떤 uEnv 파일을 사용할지 결정합니다.

그 다음, Yocto에서 사용하기 위해 u-boot에서 완전한 패치를 생성합니다:

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

이 패치를 Yocto의 'u-boot-visionfive_%.bbappend'에 포함합니다:

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

SRC_URI:append = " \
    file://0004-u-boot.patch \
"
u-boot 비트베이크

'u-boot-visionfive_%.bbappend'에서 MENDER_UBOOT_AUTO_CONFIGURE = "1"을 MENDER_UBOOT_AUTO_CONFIGURE = "0"으로 변경합니다.

이제 Mender의 자동 구성 기능 없이 사용자 정의 패치를 사용하여 u-boot를 비트베이크할 수 있습니다:

bitbake u-boot-visionfive
2단계 부트로더로 업로드용 u-boot 컴파일

이제 'bitbakeu-boot-vision 5'로 추가된 패치를 포함하는 'VisionFive-build/tmp/work/starfive_vision five_jh7100-poky-linux/u-boot-vision five/1_v2022.03-r0/git' 디렉토리에서 u-boot을 컴파일할 수 있습니다.

Yocto Linux 비트베이크

Mender 클라이언트가 포함된 Yocto Linux 비트베이크:

bitbake vision-five-image-mender

Linux 이미지를 SD 카드에 플래시하고 VisionFive SOC를 부팅합니다. 모든 것이 제대로 작동하면 장치가 Mender 서버 GUI에서 보류 중인 장치로 나타납니다.

'DEVICES'에서 이를 수락하고 포함하여 이 장치에 대한 이후 소프트웨어 업데이트 배포를 관리할 수 있습니다.

Mender용 아티팩트를 생성하는 방법은 VisionFive - Mender - Yocto - 파트 4를 참조하세요.

저작권 라이선스

Copyright © 2022 Interelectronix e.K.
이 프로젝트 소스 코드는 GPL-3.0 라이선스에 따라 라이선스가 부여됩니다.

임베디드 소프트웨어 - VisionFive - Mender - Yocto 컴퓨터의 스크린샷
파트 1 - Yocto 환경의 기본 설정

시리즈의 글 중 파트 1에서는 Mender 클라이언트를 통합한 Yocto Linux를 생성하기 위해 Yocto 환경을 설정하는 방법에 대해 설명합니다.

임베디드 소프트웨어 - VisionFive - Mender - Yocto 컴퓨터의 스크린샷
파트 2 - Mender를 포함하기 위한 기본 설정

시리즈의 글 중 파트 2에서는 Mender 클라이언트를 통합한 Yocto Linux를 생성하기 위해 Yocto 환경을 설정하는 방법에 대해 설명합니다.

임베디드 소프트웨어 - VisionFive - Mender - Yocto 컴퓨터의 스크린샷
파트 4 - Mender용 아티팩트를 생성하는 방법

시리즈의 글 중 파트 4에서는 Mender 클라이언트를 통합한 Yocto Linux를 생성하기 위해 Yocto 환경을 설정하는 방법에 대해 설명합니다.