linux Yocto/BitBake忽略命令行变量覆盖

wkyowqbh  于 2023-10-16  发布在  Linux
关注(0)|答案(2)|浏览(178)

在我的local.conf中,我定义了以下变量:

MACHINE ?= "default"
# Version variables overriden by CI/CD
CI_COMMIT_BRANCH ?= "local"
BUILD_VERSION ?= "v0.0.0"
CI_COMMIT_SHORT_SHA ?= "local version"

在一个配方(custom-fit-image.bb)中,我使用这些变量:

python do_image_complete() {

    machine = d.getVar('MACHINE', expand=True)
    version_tag = d.getVar('BUILD_VERSION', expand=True)
    branch_type = d.getVar('CI_COMMIT_BRANCH', expand=True)
    git_short_hash = d.getVar('CI_COMMIT_SHORT_SHA', expand=True)
    bb.note(f"MACHINE: {machine}; BUILD_VERSION: {version_tag};CI_COMMIT_BRANCH: {branch_type};CI_COMMIT_SHORT_SHA: {git_short_hash}")
    ....
    ....
}
addtask do_image_complete before do_populate_sysroot after do_install

当我从命令行调用bitbake时,我想像这样覆盖它们:

MACHINE=my_machine CI_COMMIT_BRANCH=bli BUILD_VERSION=bla CI_COMMIT_SHORT_SHA=blub bitbake custom-fit-image

然而,只有机器被覆盖。这里是do_image_complete函数的bb.note调用的输出:

NOTE: MACHINE: my_machine; BUILD_VERSION: v0.0.0;CI_COMMIT_BRANCH: local;CI_COMMIT_SHORT_SHA: local version

为什么只有MACHINE被覆盖,我如何覆盖其他变量?我能看到的唯一区别是,MACHINE是一个标准的yocto变量,用于很多地方,其他变量是我的自定义变量。但它们仍然是在同一个文件中定义的,我试图以同样的方式覆盖它们。所以我有点困惑。

wfypjpf4

wfypjpf41#

在BB_ENV_PASSTHROUGH_ADDITIONS中查看bitbake手册:
https://docs.yoctoproject.org/bitbake/2.4/bitbake-user-manual/bitbake-user-manual-metadata.html#passing-information-into-the-build-task-environment
您将看到默认脚本/oe-buildenv-internal脚本设置BB_ENV_PASSTHROUGH_ADDITIONS_OE以包括MACHINE、DISTRO、TCMODE、TCLIBC、HTTP_PROXY、http_proxy等。

y53ybaqx

y53ybaqx2#

除了Richard的响应之外,还可以在BB_ENV_PASSTHROUGH_ADDITIONS中添加自定义变量。
local.conf中添加以下内容:

export BB_ENV_PASSTHROUGH_ADDITIONS="${BB_ENV_PASSTHROUGH_ADDITIONS} BUILD_VERSION CI_COMMIT_BRANCH CI_COMMIT_SHORT_SHA"

相关问题