根据变量值排除 yocto 元层

Excluding yocto meta-layer depending on a variable value

我正在为个人项目使用 yocto。我有一个名为 meta-nightcore 的图层,它有几个用不同语言编写的文件:bash、Python、C、C++ 和几个食谱。

是否可以在用户定义变量 NIGHTCORE_ENABLED 时调用 bitbake <image_name> 时排除 meta-nightcore?此变量在调用 source oe-init-build-env.

之前通过 shell 命令设置

如果你有不同的想法,可以分享吗?

谢谢,祝好, 陈维

是的,您可以 pass your environment variable into the build environment 然后使用它有条件地添加额外的图层。

您需要修改 bblayers.conf 以存储 NIGHTCORE_ENABLED 的默认值,并在 BBLAYERS 设置为 [= 时将额外层添加到 BBLAYERS 15=]:

NIGHTCORE_ENABLED ?= "0"  # overridden by env if specified in BB_ENV_EXTRAWHITE
NIGHTCORE_LAYERS ?= "/path/to/poky/meta-nightcore"

BBLAYERS ?= " \
  /path/to/poky/meta \
  /path/to/poky/meta-poky \
  /path/to/poky/meta-yocto-bsp \
  ${@bb.utils.contains('NIGHTCORE_ENABLED', '1', '${NIGHTCORE_LAYERS}', '', d)} \
"

然后,您需要通过将环境变量添加到 BB_ENV_EXTRAWHITE:

来告诉 Bitbake 允许将您的环境变量捕获到 Bitbake 数据存储中
export NIGHTCORE_ENABLED=1
export BB_ENV_EXTRAWHITE="${BB_ENV_EXTRAWHITE} NIGHTCORE_ENABLED"

然后您可以 运行 bitbake <image_name>.

因为bblayers.conf通常是在source oe-init-build-env第一次为运行时生成的,你可能希望use TEMPLATECONF to create a bblayers.conf.sample file已经包含了这个额外的逻辑。

这里也有一些相关的回答:

Is it possible to pass in command line variables to a bitbake build?