You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Yocto的BSP层配方中覆写语句恢复systemd-networkd?

问题描述

在为Variscite开发板使用其BSP构建Yocto的core-image-minimal镜像时,发现系统未包含systemd-networkd,尝试添加但遇到问题:

Variscite BSP层的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"移除了networkd支持。直接注释该行重建可以生效,但更新BSP层后修改会丢失。

已添加自定义层meta-csi,其中meta-csi/recipes-core/systemd/systemd_%.bbappend内容为:

PACKAGECONFIG:append = "networkd"

但构建后systemd-networkd仍未被添加,不清楚两个配方的运行顺序、层优先级机制,也不知道正确的恢复方法。

解决方案

1. 理解BBAppend的执行顺序与层优先级

  • 所有针对同一个配方的.bbappend都会被执行,执行顺序由层的BBFILE_PRIORITY决定:优先级数值低的层先处理,优先级高的层后处理。
  • Variscite BSP层的优先级通常在80左右,只需确保自定义层meta-csi的优先级高于它(比如设为90),就能让自定义层的.bbappend在BSP层之后执行,从而覆盖或修正BSP层的配置。

在meta-csi/conf/layer.conf中添加或修改:

BBFILE_PRIORITY_csi = "90"

2. 正确恢复systemd-networkd的配置

由于BSP层通过PACKAGECONFIG:remove = "networkd"移除了networkd,自定义层需要在BSP层之后将其重新加入PACKAGECONFIG。在meta-csi/recipes-core/systemd/systemd_%.bbappend中使用以下写法:

# 重新添加networkd到PACKAGECONFIG列表
PACKAGECONFIG += " networkd"

注意:networkd前面要加空格,确保它作为独立项加入列表,避免和其他项连在一起导致解析错误。

或者更精准地撤销BSP层的移除操作:

PACKAGECONFIG:remove -= "networkd"

3. 无需复制BSP配方的全部内容

不需要复制BSP层.bbappend的所有内容,只需在自定义层的.bbappend中针对需要修改的配置项单独调整即可,BitBake会自动合并所有.bbappend的配置。

内容的提问来源于stack exchange,提问作者xAptive

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 18:05:28