Yocto Gatesgarth构建eSDK时populate_sdk_ext任务失败
故障根因
可扩展SDK(eSDK)构建流程默认会查找提前生成的buildtools独立安装包,直接执行eSDK构建命令时,系统未预先产出对应架构的buildtools包,导致populate_sdk_ext.bbclass在SDK部署目录下匹配不到*-buildtools-nativesdk-standalone-*.sh格式的文件,访问空数组末尾元素触发越界报错。
修复步骤
- 预先构建对应架构的buildtools安装包,在Yocto构建环境下执行命令:
bitbake buildtools-tarball
若需要eSDK支持32位x86主机,先将
conf/local.conf中的SDKMACHINE值改为i686再执行上述构建命令,保证架构完全匹配。
- 构建完成后检查
tmp/deploy/sdk目录,确认存在类似x86_64-buildtools-nativesdk-standalone-3.2.4.sh的脚本文件,再进行后续操作。 - (可选配置)如果所有使用eSDK的开发主机已经提前安装好Yocto构建要求的全部系统依赖,可以直接在镜像配方或
local.conf中添加如下配置,跳过buildtools打包逻辑,彻底规避该依赖检查:
SDK_INCLUDE_BUILDTOOLS = "0"
- 重新执行eSDK构建命令:
bitbake test-image-mx6ull -c populate_sdk_ext
配置校验说明
- 当前镜像配方中
populate_sdk_qt5与populate_sdk_ext的继承配置无冲突,Qt相关的SDK集成逻辑可正常生效,无需移除。 - 需确认Docker构建环境下
tmp目录权限配置正确,避免buildtools包因权限不足写入失败,造成文件缺失。 - Gatesgarth版本eSDK强制要求构建主机架构与
SDKMACHINE指定的SDK运行架构一致,当前配置SDKMACHINE = "x86_64"时,需保证Docker容器运行在x86_64架构主机上,否则会触发架构不匹配的阻断报错。
内容的提问来源于stack exchange,提问作者giorgino
相关产品推荐
相关产品推荐

