
您是否曾在自定义 meta 层中创建方案变量的覆盖,而没有发生任何事情?不要怀疑自己,看一下所使用 meta 层的优先级。### 范例
我们想构建用于 Raspberry Pi 4 的 Yocto Linux 发行版,并更改 psplash 方案的背景图像。为此,我们会在自定义 meta 层“meta-interelectronix”中创建文件夹“psplash”,并添加文件“psplash_%.bbappend”以覆盖“SPLASH_IMAGES”的变量。
SPLASH_IMAGES:rpi = "file://psplash-ixlogo-white-img.h;outsuffix=raspberrypi"
将“meta-interelectronix”添加到“bblayers.conf”之后,我们会对 Linux 发行版执行 bitbake 命令,将其写入 SD 卡并用其启动 Raspberry Pi 4。但没有在初始屏幕上使用自定义背景图像——为什么?### 这种行为是什么导致的?搜索“错误”后,我们看了一下 meta 层的优先级变量。Meta 层有一个用于优先级的变量,用于定义在对 Linux 发行版执行 bitbake 命令时使用 meta 层等级。变量在文件“meta-interelectronix/conf/layer.conf”中设置:
BBFILE_PRIORITY_meta-interelectronix = "6"
在我们的案例中,“meta-interelectronix”的优先级被设置为“6”,“meta-raspberrypi”的优先级设置为“9”。优先级越高,应用 bbappend 文件的变量执行 bitbake 命令就越靠后。因为“meta-raspberrypi”也是“psplash_%.bbappend”文件,该文件的变量再次覆盖我们的“meta-interelectronix”层中的覆盖,这样就没有发生任何变化。
注
将自定义 meta 层的优先级更改为较大数字(例如50) ,以便将您的更改在所有外来 meta 层的覆盖之后应用。
如何轻松搞定变量的等级?有一个简单的命令可以取得变量在所有 meta 层上的等级:
bitbake-getvar -r recipe VARIABLE
本例中的命令是:
bitbake-getvar -r psplash SPLASH_IMAGES
将“meta-interelectronix”层的优先级更改为“50”后,结果是这个样子:
bitbake-getvar -r psplash SPLASH_IMAGES
#
# $SPLASH_IMAGES [4 operations]
# set /workdir/poky-kirkstone/meta/recipes-core/psplash/psplash_git.bb:19
# "file://psplash-poky-img.h;outsuffix=default"
# set /workdir/poky-kirkstone/meta-interelectronix/recipes-core/psplash/psplash_%.bbappend:10
# "file://psplash-ixlogo-white-img.h;outsuffix=interelectronix"
# override[rpi]:set /workdir/poky-kirkstone/meta-raspberrypi/recipes-core/psplash/psplash_%.bbappend:2
# "file://psplash-raspberrypi-img.h;outsuffix=raspberrypi"
# override[rpi]:set /workdir/poky-kirkstone/meta-interelectronix/recipes-core/psplash/psplash_%.bbappend:9
# "file://psplash-ixlogo-white-img.h;outsuffix=raspberrypi"
# pre-expansion value:
# "file://psplash-ixlogo-white-img.h;outsuffix=raspberrypi"
SPLASH_IMAGES="file://psplash-ixlogo-white-img.h;outsuffix=raspberrypi"
您也可以使用以下命令显示已使用层的优先级:
bitbake-layers show-layers
版权许可
版权所有 © 2022 Interelectronix e.K.
本项目源代码根据 GPL-3.0 许可证获得许可。