Yocto构建间歇性失败:dwarfsrcfiles不存在问题求助
Yocto构建报错:do_package阶段找不到dwarfsrcfiles的解决方案
问题背景
使用Yocto Dunfell版本时,某应用出现间歇性构建失败,报错如下:
ERROR: my-app-1.0.52-213f116 do_package: Fatal errors occurred in subprocesses: [Errno 2] No such file or directory: 'dwarfsrcfiles': 'dwarfsrcfiles': Traceback (most recent call last): File "/var/lib/jenkins/workspace/la_meta-my-layer_check-build/my-yocto-sdk/poky/meta/lib/oe/utils.py", line 280, in run ret = self._target(*self._args, **self._kwargs) File "/var/lib/jenkins/workspace/la_meta-my-layer_check-build/my-yocto-sdk/poky/meta/classes/package.bbclass", line 405, in splitdebuginfo sources = source_info(file, d) File "/var/lib/jenkins/workspace/la_meta-my-layer_check-build/my-yocto-sdk/poky/meta/classes/package.bbclass", line 353, in source_info output = subprocess.check_output(cmd, universal_newlines=True, stderr=subprocess.STDOUT) File "/usr/lib/python3.7/subprocess.py", line 395, in check_output **kwargs).stdout File "/usr/lib/python3.7/subprocess.py", line 472, in run with Popen(*popenargs, **kwargs) as process: File "/usr/lib/python3.7/subprocess.py", line 775, in __init__ restore_signals, start_new_session) File "/usr/lib/python3.7/subprocess.py", line 1522, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'dwarfsrcfiles': 'dwarfsrcfiles'
已尝试的操作:
- 添加
PARALLEL_MAKE = "",未解决问题 - 设置
PARALLEL_MAKE = "-j 20",导致每次构建必败
补充信息:
- 配方未修改打包步骤
- dwarfsrcfiles实际已构建完成,失败后可正常运行
- 升级至Kirkstone版本后问题仍存在
解决方案
1. 显式添加构建依赖
问题根源是do_package阶段未正确等待dwarfsrcfiles-native完成安装,在配方中添加以下内容,强制依赖关系:
DEPENDS += "dwarfsrcfiles-native" do_package[depends] += "dwarfsrcfiles-native:do_populate_sysroot"
该配置确保do_package必须在dwarfsrcfiles-native的do_populate_sysroot步骤完成后执行,保证工具已被安装到构建环境的PATH中。
2. 确保PATH包含工具路径
如果依赖关系已存在但环境变量未正确设置,可在配方中显式将dwarfsrcfiles所在目录加入do_package阶段的PATH:
do_package[env] += "PATH=${STAGING_BINDIR_NATIVE}:${PATH}"
STAGING_BINDIR_NATIVE是Yocto中存放原生工具的目录,dwarfsrcfiles默认安装在此处。
3. 限制打包阶段的并行度
PARALLEL_MAKE控制的是编译阶段的并行,打包阶段的并行由阶段级配置控制。可在配方中强制打包阶段单线程执行:
do_package[parallel] = "1"
验证
添加上述任意配置后,清理应用的构建状态(bitbake -c clean my-app),重新执行构建,观察是否仍出现找不到dwarfsrcfiles的错误。
内容的提问来源于stack exchange,提问作者parsley72
相关产品推荐
相关产品推荐

