Bitbake如何调用另一文件的函数并控制任务执行顺序
Bitbake公共逻辑复用与执行顺序配置修复方案
错误根因说明
addtask报函数未找到错误:只有前缀为do_的函数才能被Bitbake识别为可注册的任务,普通自定义函数无法直接通过addtask添加到任务队列- 执行顺序不符合预期:仅配置
before do_install无法保证自定义逻辑在do_install_prepend之前运行,所有do_install_prepend的代码默认会在do_install主体执行前运行,优先级高于before do_install的任务
推荐实现方案(两种可选)
方案1:独立任务模式(适合逻辑复杂、需要单独调试的场景)
步骤1:编写公共引入文件(例如命名为install-common.inc)
# 定义通用变量 COMMON_INSTALL_PATH = "${D}/usr/share/common" # 复用逻辑封装为do_开头的任务函数 do_common_install_init() { # 此处填写90%重合的通用逻辑 install -d ${COMMON_INSTALL_PATH} cp ${S}/common-resource/* ${COMMON_INSTALL_PATH} } # 直接在公共文件配置执行顺序,确保在do_install_prepend之前运行 addtask do_common_install_init before do_install_prepend do_install # 配置任务依赖,保证该任务默认自动执行 do_install[depends] += "do_common_install_init"
步骤2:修改原有两个配方
在两个配方的最顶部(所有do_install、do_install_prepend定义之前)添加引入语句:
require install-common.inc
原有配方的do_install_prepend仅保留各自独有的10%逻辑即可,无需重复编写通用代码。
方案2:prepend自动合并模式(更轻量,适合简单逻辑复用)
Bitbake支持对同一个任务的多个_prepend逻辑自动按引入顺序合并执行,无需额外注册任务:
- 在
install-common.inc中直接定义通用的prepend逻辑:
do_install_prepend() { # 此处填写90%重合的通用逻辑 }
- 在两个配方最顶部引入该
inc文件,之后在配方中定义的do_install_prepend仅保留独有逻辑即可。
由于require语句写在配方自有prepend之前,公共prepend会优先执行,符合你要求的执行顺序。
注意事项
- 公共
.inc文件需要放在对应层的classes/目录或者对应配方的同级目录下,确保Bitbake可以找到 - 不要在配方中重复编写
addtask语句,避免重复定义报错
内容的提问来源于stack exchange,提问作者Robert Kwiatkowski
相关产品推荐
相关产品推荐

