Настройка u-boot Mender
Мы используем ветвь Yocto Kirkstone для разработки. Предполагается, что у вас уже установлена и настроена рабочая среда разработки (см. статьи VisionFive — Mender — Yocto — часть 1 и VisionFive — Mender — Yocto — часть 2).
u-boot и плата VisionFive
Одноплатный компьютер VisionFive RISC-V SBC использует два загрузчика: secondBoot and u-boot. Принципы работы описаны в кратком руководстве по одноплатному компьютеру VisionFive.
Согласно требованиям:
— для u-boot необходимо установить патч с настройками для mender, загруженный по ссылке https://github.com/starfive-tech/u-boot; — необходимо выполнить bitbake u-boot с yocto; — необходимо скомпилировать u-boot вручную для отправки с загрузчиком второго этапа.
Установка патча для u-boot
Сначала клонируйте производную u-boot из starfive-tech, чтобы получить базу кода для работы.
git clone -b JH7100_upstream https://github.com/starfive-tech/u-boot.git
Автоматически настроенный патч Mender
meta-mender-core в Yocto пытается автоматически пропатчить u-boot для нужд Mender, если установлено значение MENDER_UBOOT_AUTO_CONFIGURE = "1". В большинстве случаев этот сценарий не работает из-за настроек производителей плат.
Но автоматически настроенный патч Mender — хорошая отправная точка, чтобы настроить u-boot для системы на кристалле VisionFive SOC с клиентом Mender.
Чтобы получить автоматически настроенный патч, выполните bitbake u-boot с параметром MENDER_UBOOT_AUTO_CONFIGURE = "1":
bitbake u-boot-visionfive
Файл патча "mender_auto_configured.patch" создается в каталоге "your-build-directory/tmp/work/starfive_visionfive_jh7100-poky-linux/u-boot-visionfive/1_v2022.03-r0".
Применение патча для клонированного u-boot
Затем мы применяем патч mender_auto_configured.patch к клонированному репозиторию u-boot из starfive-tech.
cd u-boot-starfive
git apply path-to-patch/mender_auto_configured.patch
Настройка u-boot-starfive
u-boot должен знать переменные Mender, чтобы получать правильную информацию о том, из какого раздела система на кристалле должна выполнять загрузку после развертывания артефакта на сервере 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-файл будет использоваться для загрузки ядра.
Затем создайте полный патч из u-boot для использования в Yocto:
git diff --patch > ~/Documents/Yocto/meta-interelectronix-visionfive/recipes-bsp/u-boot/files/0004-u-boot.patch
Включите этот патч в "u-boot-visionfive_%.bbappend" в Yocto:
FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
SRC_URI:append = " \
file://0004-u-boot.patch \
"
Выполнение bitbake u-boot
В "u-boot-visionfive_%.bbappend" измените значение MENDER_UBOOT_AUTO_CONFIGURE = "1" на MENDER_UBOOT_AUTO_CONFIGURE = "0".
Теперь можно выполнить bitbake u-boot без функции автоматической настройки mender и с пользовательскими патчами:
bitbake u-boot-visionfive
Компиляция u-boot для отправки с загрузчиком второго этапа
Теперь вы можете скомпилировать u-boot в каталоге "VisionFive-build/tmp/work/starfive_visionfive_jh7100-poky-linux/u-boot-visionfive/1_v2022.03-r0/git", который содержит патчи, добавленные с помощью "bitbake u-boot-visionfive".
— Компиляция u-boot для системы на кристалле VisionFive описана в статье Компиляция u-boot и ядра. — Отправка u-boot для системы на кристалле VisionFive SOC описана в статье Приложение Б. Обновление прошивки и u-boot.
Выполнение bitbake Yocto Linux
Выполнение bitbake Yocto Linux с внедренным клиентом Mender:
bitbake vision-five-image-mender
Установите образ Linux на SD-карту и загрузите систему на кристалле VisionFive SOC. Если всё работает, устройство появляется в качестве ожидающего в графическом интерфейсе сервера Mender.
В разделе "DEVICES" (УСТРОЙСТВА) можно одобрить его и разрешить управление развертыванием последующих обновлений ПО для этого устройства.
Как создать артефакт для Mender: VisionFive — Mender — Yocto — часть 4.
Лицензия на авторские права
Авторское право © 2022 Interelectronix e.K.
Данный исходный код проекта лицензирован под лицензией GPL-3.0.
Часть 1 серии статей о настройке среды Yocto для создания Yocto Linux с интеграцией клиента Mender.
Часть 2 серии статей о настройке среды Yocto для создания Yocto Linux с интеграцией клиента Mender.
Часть 4 посвящена настройке среды Yocto для создания Yocto Linux с интеграцией клиента Mender.