การตั้งค่า 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'
- วิธีการคอมไพล์ u-boot สําหรับ VisionFive SOC อธิบายไว้ใน Compiling u-boot และ Kernel
- วิธีการอัปโหลด u-boot สําหรับ VisionFive SOC อธิบายไว้ในภาคผนวก B: การอัปเดตเฟิร์มแวร์และคุณบูต
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
ส่วนที่ 1 ของชุดบทความวิธีการตั้งค่าสภาพแวดล้อม Yocto เพื่อสร้าง Yocto Linux ด้วยการรวมไคลเอนต์ Mender
ส่วนที่ 2 ของชุดบทความวิธีการตั้งค่าสภาพแวดล้อม Yocto เพื่อสร้าง Yocto Linux ด้วยการรวมไคลเอนต์ Mender
ส่วนที่ 4 ของชุดบทความวิธีการตั้งค่าสภาพแวดล้อม Yocto เพื่อสร้าง Yocto Linux ด้วยการรวมไคลเอนต์ Mender