Thiết lập u-boot Mender
Chúng tôi đang sử dụng chi nhánh Yocto Kirkstone để phát triển. Chúng tôi giả định rằng bạn đã có một môi trường phát triển làm việc được cài đặt và thiết lập môi trường của bạn như được mô tả trong VisionFive - Mender - Yocto - Phần 1 và trong VisionFive - Mender - Yocto - Phần 2.
u-boot bảng VisionFive
VisionFive RISC-V SBC sử dụng hai bộ nạp khởi động - một secondBoot và you-boot. Các cơ chế hoạt động như thế nào được mô tả trong Hướng dẫn bắt đầu nhanh VisionFive SBC.
Xử lý các yêu cầu này có nghĩa là
- Chúng tôi phải vá U-boot từ https://github.com/starfive-tech/u-boot với các cài đặt cho Mender
- Chúng ta phải bitbake u-boot với yocto
- Chúng ta phải biên dịch U-boot theo cách thủ công để tải lên với bộ nạp khởi động giai đoạn thứ hai
Vá u-boot
Đầu tiên, sao chép dẫn xuất u-boot từ starfive-tech để có được một cơ sở mã để làm việc.
git clone -b JH7100_upstream https://github.com/starfive-tech/u-boot.git
Bản vá được cấu hình tự động Mender
meta-mender-core trong Yocto cố gắng tự động vá u-boot cho nhu cầu Mender nếu 'MENDER_UBOOT_AUTO_CONFIGURE = "1" được đặt. Trong hầu hết các trường hợp, kịch bản này không hoạt động do sự điều chỉnh của các nhà sản xuất bo mạch.
Nhưng bản vá tự động cấu hình của Mender là điểm khởi đầu tốt để điều chỉnh u-boot cho VisionFive SOC với ứng dụng khách Mender.
Để có được bản vá được cấu hình tự động, bạn phải bitbake u-boot với cài đặt MENDER_UBOOT_AUTO_CONFIGURE = "1":
bitbake u-boot-visionfive
Tệp vá có tên 'mender_auto_configured.patch' được tạo trong thư mục 'your-build-directory/tmp/work/starfive_visionfive_jh7100-poky-linux/u-boot-visionfive/1_v2022.03-r0'.
Áp dụng bản vá cho u-boot nhân bản
Tiếp theo, chúng tôi áp dụng mender_auto_configured.patch này vào kho lưu trữ u-boot nhân bản từ starfive-tech.
cd u-boot-starfive
git apply path-to-patch/mender_auto_configured.patch
Tùy chỉnh u-boot-starfive
u-boot cần biết các biến Mender để có được thông tin chính xác từ phân vùng nào SOC sẽ khởi động sau khi triển khai artifact với máy chủ Mender.
Vì vậy, chúng ta phải tùy chỉnh tệp 'u-boot-starfive/include/configs/starfive-jh7100.h' để lấy các biến Mender và quản lý từ phân vùng nào để khởi động:
#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
Kiểm tra '${mender_kernel_root_name}' là điểm và sau đó quyết định tệp uEnv nào được lấy để tải kernel.
Sau đó, tạo một bản vá hoàn chỉnh từ u-boot để sử dụng nó trong Yocto:
git diff --patch > ~/Documents/Yocto/meta-interelectronix-visionfive/recipes-bsp/u-boot/files/0004-u-boot.patch
Bao gồm bản vá này trong Yocto trong 'u-boot-visionfive_%.bbappend':
FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
SRC_URI:append = " \
file://0004-u-boot.patch \
"
bitbake u-boot
Trong 'u-boot-visionfive_%.bbappend', thay đổi MENDER_UBOOT_AUTO_CONFIGURE = "1" thành MENDER_UBOOT_AUTO_CONFIGURE = "0".
Bây giờ bạn có thể bitbake u-boot mà không cần chức năng tự động cấu hình của mender và với các bản vá tùy chỉnh:
bitbake u-boot-visionfive
Biên dịch u-boot để tải lên với bộ nạp khởi động giai đoạn thứ hai
Bây giờ bạn có thể biên dịch u-boot trong thư mục 'VisionFive-build / tmp / work / starfive_visionfive_jh7100-poky-linux / u-boot-visionfive / 1_v2022.03-r0 / git', chứa các bản vá được thêm bằng 'bitbake u-boot-visionfive'.
- Cách biên dịch u-boot cho VisionFive SOC được mô tả trong Compiling u-boot và Kernel
- Cách tải u-boot lên VisionFive SOC được mô tả trong Phụ lục B: Cập nhật chương trình cơ sở và bạn khởi động
bitbake Yocto Linux
bitbake Yocto Linux với ứng dụng khách Mender đi kèm:
bitbake vision-five-image-mender
Flash hình ảnh Linux vào thẻ SD và khởi động VisionFive SOC. Nếu tất cả đều hoạt động tốt, thiết bị sẽ xuất hiện dưới dạng thiết bị đang chờ xử lý trong GUI máy chủ Mender.
Trong phần "THIẾT BỊ", bạn có thể chấp nhận và đưa nó vào để quản lý việc triển khai các bản cập nhật phần mềm sau này cho thiết bị này.
Xem cách tạo tạo tạo tác cho Mender trong VisionFive - Mender - Yocto - Phần 4.</:code8:></:code7:></:code6:></:code5:></:code4:></:code3:></:code2:></:code1:>
Giấy phép bản quyền
**Bản quyền © 2022 Interelectronix ví dụ: **
Mã nguồn Project này được cấp phép theo giấy phép GPL-3.0.
Phần 1 của loạt bài viết, cách thiết lập môi trường Yocto để tạo Yocto Linux với sự tích hợp của máy khách Mender.
Phần 2 của loạt bài viết, cách thiết lập môi trường Yocto để tạo Yocto Linux với sự tích hợp của máy khách Mender.
Phần 4 của loạt bài viết, cách thiết lập môi trường Yocto để tạo Yocto Linux với sự tích hợp của máy khách Mender.