嵌入式软件 - 视觉五 - 曼德 - Yocto - 第 3 部分 计算机的屏幕截图

VisionFive - Mender - Yocto

第 3 部分 - 用于 Mender 的 u-boot 配置

Mender u-boot 设置

Mender 的 u-boot 配置

我们正在使用 Yocto Kirkstone 分支进行开发。我们假设您已经按照 VisionFive - Mender - Yocto - 第 1 部分VisionFive - Mender - Yocto - 第 2 部分 中的描述安装并设置了开发环境。### u-boot VisionFive 开发板

VisionFive RISC-V SBC 使用两种启动项加载工具:secondBoot 和 u-boot。VisionFive SBC 快速入门指南中描述了其运作机制。处理这些要求意味着

  • 我们必须从 https://github.com/starfive-tech/u-boot 使用 mender 的设置修补 u-boot
  • 我们必须使用 yocto 对 u-boot 执行 bitbake 命令
  • 我们必须手动编译 u-boot 才能使用第 2 阶段的启动引导程序上传

修补 u-boot

首先,从 starfive-tech 克隆 u-boot 衍生程序,以获取要使用的代码库。

git clone -b JH7100_upstream https://github.com/starfive-tech/u-boot.git
Mender 自动配置补丁

如果已经设置“MENDER_UBOOT_AUTO_CONFIGURE = "1"”,Yocto 中的 meta-mender-core 将尝试自动修补 u-boot 来满足 Mender 的需要。在大多数情况下,由于开发板制造商的调整,这种场景不起作用。但 Mender 的自动配置补丁是调整 u-boot 的良好起点,适用于 具有 Mender 客户端的 VisionFive SOC。要获取自动配置的补丁,您必须使用“MENDER_UBOOT_AUTO_CONFIGURE = "1"”设置对 u-boot 执行 bitbake 命令:

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

下一步,我们将把 mender_auto_configured.patch 应用到来自 starfive-tech 的克隆 u-boot 存储库。

cd u-boot-starfive
git apply path-to-patch/mender_auto_configured.patch
自定义 u-boot-starfive

u-boot 需要知道 Mender 变量,以获取在使用 Mender 服务器部署项目后 SOC 应该从哪个分区启动的正确信息。因此,我们必须自定义“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 文件加载内核。在此之后,从u -boot 创建一个完整的补丁供其在 Yocto 中使用:

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 执行 bitbake 命令

在“u-boot-visionfive_%.bbappend”中,将“MENDER_UBOOT_AUTO_CONFIGURE = "1"”更改为“MENDER_UBOOT_AUTO_CONFIGURE = "0"”。您现在可以对 u-boot 执行 bitbake 命令,无需 mender 的自动配置功能,也不需要自定义补丁:

bitbake u-boot-visionfive
编译 u-boot 用于使用第二阶段启动引导程序上传

您现在可以在“VisionFive-build/tmp/work/starfive_visionfive_jh7100-poky-linux/u-boot-visionfive/1_v2022.03-r0/git”目录中编译 u-boot,这其中包含使用“bitbake u-boot-visionfive”添加的补丁。- 如何编译 u-boot 用于 VisionFive SOC 详见 编译 u-boot 和内核

对 Yocto Linux 执行 bitbake 命令

使用包含的 Mender 客户端对 Yocto Linux 执行 bitbake 命令:

bitbake vision-five-image-mender

将 Linux 镜像写入 SD 卡并启动 VisionFive SOC。如果所有操作都正常,设备将在 Mender 服务器 GUI 中显示为已挂起设备。您可以在“设备”下接受并包含它,以管理此设备后期软件更新的部署。在 VisionFive - Mender - Yocto - 第 4 部分了解如何创建 Mender 的项目。

版权许可

版权所有 © 2022 Interelectronix e.K.
本项目源代码根据 GPL-3.0 许可证获得许可。

嵌入式软件 - 视觉五 - 曼德 - 约克托 计算机截图
第 1 部分 - Yocto 环境的基本设置

系列文章《如何设置 Yocto 环境,以创建具有 Mender 客户端集成的 Yocto Linux》的第 1 部分。

嵌入式软件 - 视觉五 - 曼德 - 约克托 计算机截图
第 2 部分 - 用于包含 Mender 的基本设置

系列文章《如何设置 Yocto 环境,以创建具有 Mender 客户端集成的 Yocto Linux》的第 2 部分。

嵌入式软件 - 视觉五 - 曼德 - 约克托 计算机截图
第 4 部分 - 创建用于 mender 的项目

系列文章《如何设置 Yocto 环境,以创建具有 Mender 客户端集成的 Yocto Linux》的第 4 部分。