如何覆盖 BSP 层 yocto 配方中的语句?

问题描述 投票:0回答:1

我正在使用他们的 BSP 为 Variscite 板构建 yocto。我正在构建 core-image-minimal。该系统不是使用 systemd-networkd 构建的,我正在尝试添加它。

Variscite 层的配方

meta-variscite-bsp/recipes-core/systemd/systemd_%.bbappend
包含以下内容:

FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:"

SRC_URI:append:imx-generic-bsp = " file://imx.conf \
            file://0001-units-add-dependencies-to-avoid-conflict-between-con.patch \
            file://0002-units-disable-systemd-networkd-wait-online-if-Networ.patch \
"

PACKAGECONFIG:remove = "networkd"

do_install:append:imx-generic-bsp() {
    install -Dm 0644 ${WORKDIR}/imx.conf ${D}${sysconfdir}/systemd/logind.conf.d/imx.conf
}

我可以看到他们专门禁用了网络。

我知道如果我注释掉

PACKAGECONFIG:remove = "networkd"
行并重建,我就会按预期获得 systemd 网络。但这似乎不是我想做的事情的正确方法。如果我更新 BSP 层,我将丢失我的更改。正确的方法似乎是添加我自己的图层,我已经这样做了。我添加了
meta-csi/recipes-core/systemd/systemd_%.bbappend
并添加了以下内容:

PACKAGECONFIG:append = "networkd"

但是,当我运行构建时,未添加 systemd-networkd。

我从来没有尝试过撤消其他层之前正在做的事情,而且我对层优先级在这种情况下如何工作知之甚少。如果我添加像这样的 systemd 配方,两个配方都会运行吗?如果是,它们运行的顺序是什么?或者只有其中一个运行?如果是这样的话,我是否必须复制 BSP 配方正在执行的所有操作,但只删除我不想要的行?

当 BSP 层配方删除它时,尝试添加回 systemd-networkd 的最正确方法是什么?

yocto bitbake yocto-recipe yocto-layer
1个回答
0
投票

我遇到了和你描述的同样的问题。

我将

PACKAGECONFIG_append = " networkd"
添加到优先级高于 meta-variscite-fslc 层的层。但由于某种原因,networkd 没有在 PACKAGECONFIG 中列出

$ bitbake systemd -e | grep ^PACKAGECONFIG
PACKAGECONFIG="    ldconfig pam               kmod     lz4          resolved     sysusers     logind"

我通过将以下内容添加到 systemd_%.bbappend 设法解决了该问题。它将清理配置参数并将网络添加为新标志。

PACKAGECONFIG_CONFARGS_remove = "-Dnetworkd=false"
PACKAGECONFIG[networkd-workaround] = "-Dnetworkd=true,-Dnetworkd=false"
PACKAGECONFIG_append = " networkd-workaround"

可能有更好的方法来处理这个问题,但这无需修改 BSP 层即可完成工作。

© www.soinside.com 2019 - 2024. All rights reserved.