
大家好,我是情报小哥~
最近小哥在折腾STM32MP257F-EV1开发板进行Yocto Linux自定义镜像构建,感觉官方的文档资料还是实操性不足,新手的话易踩坑,所以这里就把这几天一些要点整理一二。
核心适用环境:
首先需要克隆Yocto构建所需的核心仓库,一定要保障所有仓库均使用scarthgap分支,保证版本兼容性否则容易一堆解决不了的报错,执行以下git命令:
# 克隆Yocto核心poky仓库git clone -b scarthgap https://github.com/yoctoproject/poky.git# 克隆openembedded元数据仓库git clone -b scarthgap https://git.openembedded.org/meta-openembedded# 克隆ST官方STM32MP BSP仓库git clone -b scarthgap https://github.com/STMicroelectronics/meta-st-stm32mp.git# 克隆ST官方OpenSTLinux元数据仓库git clone -b scarthgap https://github.com/STMicroelectronics/meta-st-openstlinux.git进入源码目录,执行环境初始化脚本,该脚本会自动创建build构建目录并生成基础配置文件:
source poky/oe-init-build-env执行完成后,终端会自动进入build构建目录,后续配置操作均在该目录下进行。
local.conf文件位于build/conf/路径下,是Yocto构建的核心配置文件,需要修改或新增以下关键配置项,解决构建报错与开发板适配问题:
# 指定目标硬件平台MACHINE = "stm32mp2"# 指定发行版类型,weston为带图形界面的发行版DISTRO ?= "openstlinux-weston"# 接受ST的用户许可协议,必须开启否则无法构建ACCEPT_EULA_stm32mp2 = "1"# 锁定libcamera版本,解决默认0.4.0版本的构建兼容性报错PREFERRED_VERSION_libcamera = "0.3.0"坑 :scarthgap分支默认的libcamera 0.4.0版本与STM32MP2的适配存在问题,必须降级到0.3.0版本才能正常完成构建。
bblayers.conf文件同样位于build/conf/路径下,用于声明构建过程中需要加载的Yocto元数据层,必须将所有克隆的仓库路径正确添加到配置中,示例如下(需将路径替换为自己的实际源码存放路径):
BBLAYERS ?= " \/home/stYocto/poky/meta \/home/stYocto/poky/meta-poky \/home/stYocto/poky/meta-yocto-bsp \/home/stYocto/meta-openembedded/meta-oe \/home/stYocto/meta-openembedded/meta-multimedia \/home/stYocto/meta-openembedded/meta-networking \/home/stYocto/meta-openembedded/meta-python \/home/stYocto/meta-openembedded/meta-gnome \/home/stYocto/meta-openembedded/meta-webserver \/home/stYocto/meta-st-stm32mp \/home/stYocto/meta-st-openstlinux \/home/stYocto/build/workspace \"注意事项:必须保证所有路径真实存在,且所有元数据层均为scarthgap分支,否则会出现层加载失败、依赖缺失等报错。
这里实在是折腾了我很久,ST官方提供的systemd bbappend文件版本与scarthgap分支poky仓库中的systemd主配方版本不匹配,会导致构建报错,需要修改文件名称完成适配。
meta-st-openstlinux/oe-core/recipes-core/systemd/systemd_255.13.bbappendmeta-st-openstlinux/oe-core/recipes-core/systemd/systemd_255.18.bbappend该步骤的版本号需与poky仓库中实际的systemd主配方版本保持一致。2025年11月的社区验证中,该版本已更新为255.21,需对应修改为systemd_255.21.bbappend;若构建时出现No recipes available for相关报错,优先检查systemd bbappend文件的版本号是否与主配方匹配。
完成所有配置后,通过bitbake命令执行镜像构建,可根据需求选择对应的镜像类型:
bitbake st-image-westonbitbake st-image-core试过了scarthgap分支当前暂不支持core-image-base等极简镜像的HDMI/DSI显示输出,如需显示功能,建议优先使用st-image-weston镜像。
构建完成后,镜像文件会生成在build/tmp-glibc/deploy/images/stm32mp2路径下,当然烧录的方法有挺多的了,这里小哥通过官方的STM32CubeProgrammer工具将镜像烧录到开发板的eMMC中,步骤如下:
cd ~/build/tmp-glibc/deploy/images/stm32mp2STM32_Programmer_CLI -c port=usb1 -w flashlayout_st-image-core/optee/FlashLayout_emmc_stm32mp257f-ev1-optee.tsv若使用st-image-weston镜像,只需将命令中的flashlayout路径替换为对应镜像的tsv文件即可。
基本上你严格按照步骤执行,保证所有仓库分支一致、版本号匹配,可大幅降低构建报错的概率,当然还有一个大前提,保障访问github网络要稳定。
小哥搜集了一些嵌入式学习资料,公众号内回复【1024】即可找到下载链接!
推荐好文点击蓝色字体即可跳转
☞专辑|Linux应用程序编程大全 ☞ 专辑|学点网络知识 ☞ 专辑|手撕C语言 ☞ 专辑|手撕C++语言
☞ 专辑|经验分享 ☞ 专辑|从单片机到Linux ☞ 专辑|电能控制技术 ☞ 专辑|嵌入式必备数学知识 ☞ MCU进阶专辑
☞ 经验分享