ซอฟต์แวร์ฝังตัว - VisionFive - Mender - Yocto - ส่วนที่ 3 ภาพหน้าจอของคอมพิวเตอร์

VisionFive - Mender - Yocto

ส่วนที่ 3 - การกําหนดค่า u-boot สําหรับ Mender

การตั้งค่า u-boot Mender

การกําหนดค่า u-boot สําหรับ Mender

เรากําลังใช้สาขา Yocto Kirkstone เพื่อการพัฒนา เราถือว่าคุณได้ติดตั้งสภาพแวดล้อมการพัฒนาการทํางานและตั้งค่าสภาพแวดล้อมของคุณตามที่อธิบายไว้ใน VisionFive - Mender - Yocto - Part 1 และใน VisionFive - Mender - Yocto - Part 2

บอร์ด u-boot VisionFive

VisionFive RISC-V SBC ใช้โปรแกรมโหลดบูตสองตัว - secondBoot และ you-boot กลไกการทํางานนี้อธิบายไว้ในคู่มือเริ่มต้นใช้งานด่วน VisionFive SBC

การจัดการกับข้อกําหนดเหล่านี้หมายความว่า

  • เราต้องแก้ไข U-boot จาก https://github.com/starfive-tech/u-boot ด้วยการตั้งค่าสําหรับ Mender
  • เราต้อง bitbake u-boot กับ yocto
  • เราต้องคอมไพล์ U-boot ด้วยตนเองเพื่ออัปโหลดด้วย bootloader ขั้นตอนที่สอง

การแพตช์ 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 เพื่อรับข้อมูลที่ถูกต้องจากพาร์ติชันที่ 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 ใดจะถูกนําไปโหลดเคอร์เนล

หลังจากนี้ให้สร้างแพตช์ที่สมบูรณ์จาก 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 \
"
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 เพื่ออัปโหลดด้วย bootloader ขั้นตอนที่สอง

ตอนนี้คุณสามารถคอมไพล์ u-boot ในไดเร็กทอรี 'VisionFive-build/tmp/work/starfive_visionfive_jh7100-poky-linux/u-boot-visionfive/1_v2022.03-r0/git' ซึ่งมีแพตช์ที่เพิ่มด้วย 'bitbake u-boot-visionfive'

bitbake Yocto Linux

bitbake Yocto Linux พร้อมไคลเอนต์ Mender ที่รวมอยู่:

bitbake vision-five-image-mender

แฟลชภาพ Linux ไปยังการ์ด SD และบูต VisionFive SOC หากทุกอย่างทํางานได้ดีอุปกรณ์จะปรากฏเป็นอุปกรณ์ที่รอดําเนินการใน GUI เซิร์ฟเวอร์ Mender

ในส่วน "อุปกรณ์" คุณสามารถยอมรับและรวมไว้เพื่อจัดการการปรับใช้การอัปเดตซอฟต์แวร์ในภายหลังสําหรับอุปกรณ์นี้

ดูวิธีสร้างสิ่งประดิษฐ์สําหรับ Mender ใน VisionFive - Mender - Yocto - ตอนที่ 4</:code8:></:code7:></:code6:></:code5:></:code4:></:code3:></:code2:></:code1:>

ใบอนุญาตลิขสิทธิ์

ลิขสิทธิ์ © 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