如何在Yocto Honister(meta-xilinx v2022.1_update2)中生成FPGA可重构的base.dtbo?
关于Yocto Honister + meta-xilinx xlnx-rel-v2022.1_update2中FPGA可重构设备树的问题解答
1. 引入base.dtbo/pl-final.dts的步骤
- 放置设备树源文件
将pl-final.dts和base.dts(用于生成base.dtbo)放入自定义层的设备树文件目录,例如meta-custom/recipes-bsp/device-tree/files/。不推荐直接修改上游meta-xilinx层,优先通过自定义层的bbappend文件扩展。 - 添加路径覆盖配置
在自定义层中创建device-tree.bbappend,添加路径优先级:FILESEXTRAPATHS:prepend := "${THISDIR}/files:" - 配置设备树编译变量
在device-tree.bbappend或local.conf中指定覆盖文件与基础设备树:# 配置base.dtbo生成 DEVICE_TREE_OVERLAYS += "base.dtbo" DTBO_SOURCES += "base.dts" # 指定pl-final为基础设备树(若需替换默认dtb) DEVICE_TREE = "pl-final.dtb" - 启用FPGA内核驱动
在linux-xlnx_%.bbappend中添加内核配置:
确保以下核心配置开启:KERNEL_FEATURES:append = " cfg/fpga.cfg"CONFIG_FPGA=y CONFIG_FPGA_MGR_XILINX=y CONFIG_FPGA_BRIDGE=y CONFIG_FPGA_BRIDGE_XILINX=y - 验证部署与加载
编译镜像后,检查tmp/deploy/images/<目标板>/目录下是否存在base.dtbo和pl-final.dtb。启动系统后可通过以下命令加载覆盖层:fdtoverlay -i /boot/system.dtb -o /tmp/merged.dtb /boot/base.dtbo reboot
2. 恢复base.dtbo生成流程的方法
- 检查全局配置变量
打开local.conf,确认DEVICE_TREE_OVERLAYS和DTBO_SOURCES变量未被误删除:DEVICE_TREE_OVERLAYS += "base.dtbo" DTBO_SOURCES += "base.dts" - 排查自定义层覆盖逻辑
检查自定义层的device-tree.bbappend或linux-xlnx.bbappend,若存在DTBO_SOURCES:remove = "base.dts"这类语句,直接删除。 - 核对上游层原始配置
同步xlnx-rel-v2022.1_update2版本的meta-xilinx层,对比meta-xilinx/meta-xilinx-bsp/recipes-bsp/device-tree/device-tree.bb文件,确认默认编译逻辑是否包含base.dts,若上游文件被修改则恢复原始版本。 - 清理缓存重新编译
执行以下命令清理设备树编译缓存并重建:bitbake -c clean device-tree bitbake device-tree - 通过日志定位问题
启用调试日志编译,过滤base.dts相关信息:
根据日志提示修复语法错误、路径缺失等问题。bitbake device-tree -D 2>&1 | grep -i base.dts - 手动添加编译规则(兜底方案)
若自动编译逻辑失效,可在device-tree.bbappend中手动添加编译与安装步骤:do_compile:append() { ${DTC} -I dts -O dtbo -o ${B}/base.dtbo ${S}/base.dts } do_install:append() { install -m 0644 ${B}/base.dtbo ${D}/boot/ }
内容的提问来源于stack exchange,提问作者Xerusial
相关产品推荐
相关产品推荐

