نرم افزار جاسازی شده - VisionFive - Mender - Yocto - قسمت 3 یک تصویر از یک کامپیوتر

VisionFive - Mender - Yocto

بخش 3 - پیکربندی u-boot برای Mender

راه‌اندازی u-boot Mender

پیکربندی u-boot برای Mender

ما از شاخه Yocto Kirkstone برای توسعه استفاده می‌کنیم. فرض می‌کنیم که شما قبلاً یک محیط توسعه کاری را نصب کرده و محیط خود را مطابق آنچه در VisionFive - Mender - Yocto - بخش 1 و VisionFive - Mender - Yocto - بخش 2 توضیح داده شده، تنظیم کرده‌اید.

u-boot برد VisionFive

VisionFive RISC-V SBC از دو بوت لودر استفاده می‌کند - secondBoot و u-boot. مکانیسم‌های مربوط به نحوه عملکرد آن در راهنمای راه‌اندازی سریع VisionFive SBC توضیح داده شده است.

مدیریت این الزامات به این معنی است که

  • باید u-boot را از https://github.com/starfive-tech/u-boot با تنظیمات مربوط به mender پچ کنیم
  • باید 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

اگر 'MENDER_UBOOT_AUTO_CONFIGURE = "1"'" تنظیم شده باشد، meta-mender-core در Yocto سعی می‌کند به‌طور خودکار u-boot را برای نیازهای Mender پچ کند. در اغلب موارد، این سناریو به دلیل تغییرات سازندگان برد کار نمی‌کند.

اما پچ پیکربندی‌شده خودکار Mender نقطه شروع خوبی برای تنظیم u-boot برای VisionFive SOC با کلاینت Mender است.

برای دریافت پچ پیکربندی‌شده خودکار، باید 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، 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

در 'u-boot-visionfive_%.bbappend' عبارت MMENDER_UBOOT_AUTO_CONFIGURE = "1""' "1" را به MENDER_UBOOT_AUTO_CONFIGURE = "0" تغییر دهید.

اکنون می‌توانید 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' است، کامپایل کنید.

بیت‌بیک کردن Yocto Linux

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 است.

نرم افزار جاسازی شده - VisionFive - Mender - Yocto یک تصویر از یک کامپیوتر
بخش 1 - راه‌اندازی اولیه محیط Yocto

بخش 1 از مجموعه مقالات، نحوه راه‌اندازی یک محیط Yocto برای ایجاد یک Yocto Linux با ادغام یک کلاینت Mender.

نرم افزار جاسازی شده - VisionFive - Mender - Yocto یک تصویر از یک کامپیوتر
بخش 2 - راه‌اندازی اولیه برای گنجاندن Mender

بخش 2 از مجموعه مقالات، نحوه راه‌اندازی یک محیط Yocto برای ایجاد یک Yocto Linux با ادغام یک کلاینت Mender.

نرم افزار جاسازی شده - VisionFive - Mender - Yocto یک تصویر از یک کامپیوتر
بخش 4 - ایجاد یک آرتیفکت برای mender

بخش 4 از مجموعه مقالات، نحوه راه‌اندازی یک محیط Yocto برای ایجاد یک Yocto Linux با ادغام یک کلاینت Mender.