使用meta-ti构建TDA4VM Yocto镜像:非Arago发行版问题排查
问题描述
我尝试为TDA4VM构建EWAOL镜像,指定distro: ewaol时出现覆盖错误:
"Overrides could not be expanded into a stable state after 5 iterations, overrides must be being referenced by other overridden variables in some recursive fashion. Please provide your configuration to bitbake-devel so we can laugh"
使用arago作为distro时,镜像可生成但设备无法启动。想请教:
- 能否不使用arago,仅通过meta-ti构建Yocto镜像?
- 我使用kas构建镜像,配置文件如下,已集成meta-ewaol-machine但仍报错,如何解决让镜像在TDA4VM板卡上正常运行?
当前kas配置文件
header: version: 10 repos: meta-ti: url: git://git.yoctoproject.org/meta-ti path: layers/meta-ti refspec: kirkstone layers: meta-ti-bsp: meta-ti-extras: meta-arm: url: https://git.yoctoproject.org/git/meta-arm path: layers/meta-arm refspec: kirkstone layers: meta-arm: included meta-arm-bsp: included meta-arm-toolchain: included meta-openembedded: url: https://github.com/openembedded/meta-openembedded.git path: layers/meta-openembedded refspec: kirkstone layers: meta-oe: included meta-networking: included meta-python: included meta-arago: url: git://git.yoctoproject.org/meta-arago refspec: kirkstone path: layers/meta-arago layers: meta-arago-distro: meta-arago-extras: meta-qt5: url: https://github.com/meta-qt5/meta-qt5.git refspec: kirkstone path: layers/meta-qt5 layers: .: machine: j721e-evm distro: ewaol local_conf_header: meta-custom: |
解决方案
1. 能否不使用arago构建镜像?
可以。meta-ti的meta-ti-bsp层已经包含了TDA4VM(j721e-evm)的完整BSP配置,无需依赖meta-arago。arago是TI针对嵌入式场景优化的发行版,而EWAOL是面向边缘计算的发行版,两者的配置逻辑存在冲突,这也是你遇到递归覆盖错误的主要原因之一。
2. 解决递归覆盖错误与镜像启动问题
步骤1:移除冲突的meta-arago层
修改kas配置,删除meta-arago相关的所有内容,避免发行版配置冲突:
# 移除以下整个块 # meta-arago: # url: git://git.yoctoproject.org/meta-arago # refspec: kirkstone # path: layers/meta-arago # layers: # meta-arago-distro: # meta-arago-extras:
步骤2:确保meta-ewaol-machine正确集成
在kas配置的repos中添加meta-ewaol-machine,确保分支与其他层一致(kirkstone):
repos: # ... 其他已有的repo ... meta-ewaol-machine: url: git://git.yoctoproject.org/meta-ewaol-machine path: layers/meta-ewaol-machine refspec: kirkstone layers: .: included
步骤3:修复变量递归引用错误
这个错误是由于EWAOL和meta-ti层的变量存在循环引用导致的,可通过以下方式定位并修复:
- 执行
kas shell -c "bitbake -e | grep -A 10 -B 10 'recursive'",找到触发递归的变量名 - 在
local_conf_header中添加白名单,跳过这些变量的哈希检查:local_conf_header: meta-custom: | BB_HASHBASE_WHITELIST += "问题变量名1 问题变量名2" - 或者直接在local_conf中覆盖冲突变量,比如如果是
IMAGE_FEATURES冲突,可明确指定EWAOL需要的特性:local_conf_header: meta-custom: | IMAGE_FEATURES = "splash package-management ssh-server-openssh"
步骤4:清理构建环境并重新构建
删除旧的build目录,避免缓存干扰:
rm -rf build/ kas build <你的配置文件名>.yaml
步骤5:验证镜像启动配置
构建完成后,检查生成的镜像文件:
- 确保U-Boot镜像(
u-boot-j721e-evm.bin)和设备树文件(k3-j721e-common-proc-board.dtb)正确放置到SD卡的boot分区 - 确认根文件系统类型与U-Boot配置匹配(比如EWAOL默认用ext4,需确保U-Boot支持ext4)
- SD卡分区格式需符合TDA4VM要求:boot分区为FAT32,根分区为ext4
内容的提问来源于stack exchange,提问作者MysticAblaze
相关产品推荐
相关产品推荐

