Yocto构建STM32MP1自定义板:u-boot与tf-a编译失败求助
解决方案
核心误区纠正
你不需要复制U-Boot和TF-A的设备树文件到自定义层——你的需求是复用Phytec原有SoM的U-Boot/TF-A逻辑,仅在内核层处理新增硬件,所以修改U-Boot/TF-A的DTS完全没必要,这也是导致binman节点报错的根源(U-Boot编译依赖DTS中的binman节点生成镜像,你复制的DTS要么路径配置错误,要么未正确继承原有的节点配置)。
正确操作步骤
清理错误配置
- 删除自定义层
meta-racer中所有与U-Boot、TF-A相关的DTS文件及对应配置项。 - 清理之前的编译缓存:
bitbake -c clean u-boot-stm32mp tf-a-stm32mp
- 删除自定义层
自定义内核设备树
- 复制Phytec原内核设备树文件(比如
phycore-stm32mp1-3.dts,可在BSP的meta-phytec/recipes-kernel/linux/linux-stm32mp/files/下找到)到自定义层的recipes-kernel/linux/linux-stm32mp/files/目录,重命名为你的自定义板名(例如custom-phycore-stm32mp1-3.dts)。 - 在这个自定义DTS中添加显示等额外硬件的节点,示例:
// 先引入原有板级设备树 #include "phycore-stm32mp1-3.dts" // 追加自定义显示硬件节点 &lcd { status = "okay"; // 你的显示参数配置 }; - 在自定义层创建
recipes-kernel/linux/linux-stm32mp_%.bbappend文件,内容如下:FILESEXTRAPATHS:prepend := "${THISDIR}/files:" // 追加自定义设备树到编译列表,若要替换原有默认则用KERNEL_DEVICETREE:replace KERNEL_DEVICETREE += "custom-phycore-stm32mp1-3.dtb"
- 复制Phytec原内核设备树文件(比如
配置自定义机器(若未完成)
- 复制Phytec原机器配置文件
phycore-stm32mp1-3.conf到自定义层conf/machine/目录,重命名为custom-phycore-stm32mp1-3.conf。 - 保持U-Boot和TF-A的配置与原板一致,仅修改内核设备树默认值:
// 继承原板配置 require conf/machine/phycore-stm32mp1-3.conf // 指定内核默认使用自定义设备树 KERNEL_DEVICETREE:stm32mpcommon = "custom-phycore-stm32mp1-3.dtb" // 保留原U-Boot/TF-A设备树配置,不做修改 UBOOT_DEVICETREE = "${UBOOT_DEVICETREE_ORIGINAL}" TFA_DEVICETREE = "${TFA_DEVICETREE_ORIGINAL}"
- 复制Phytec原机器配置文件
重新编译镜像
bitbake st-image-weston
内容的提问来源于stack exchange,提问作者Filip Kubicz
相关产品推荐
相关产品推荐

