如何在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

