构建机器时安装了错误的文件

Wrong file installed when building a machine

我有3层:

meta-a:

meta-a
└── recipes-my
    └── mypgk
        ├── mypgk_1.0.bb
        └── mypkg_rel
            ├── config.conf
            └── mypkg.service
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}_rel:"  
SRC_URI = "file://config.conf mypkg.service"

meta-b:

meta-b
└── recipes-my
    └── mypgk
        ├── mypgk_1.0.bbappend
        └── mypkg
            └── config.conf
FILESEXTRAPATHS_prepend_${MACHINE} := "${YOCTOROOT}/meta-a/recipes-my/${PN}/${PN}_rel:"  
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"  
SRC_URI += "file://config.conf "

我还有一个meta-c层。

图层优先级:

每一层定义一个机器(machinea, machineb, machinec)

当我构建 machinea 时,安装了来自 meta-aconfig.conf 文件。

当我构建 machineb 时,安装了来自 meta-bconfig.conf 文件。

当我构建 machinec 时,会安装来自 meta-a 的 config.conf 文件,而不是 meta-b 中具有更高优先级的文件。

当我构建 machinec 时,我希望 mypkg 原样来自 meta-b,为什么 bitbake 使用其他 config.conf 文件?

如果我在 meta-b 中将 config.conf 重命名为 config_b.conf(相应地更改 .bbappend),一切都会按预期进行。

编辑:

meta-c 关于 mypgk 的内容是空的,我希望它继承自 meta-b
meta-c layer.conf 我有这个:

LAYERDEPENDS_c = "b"

mypgk_1.0.bb定义在meta-a是:

FILESEXTRAPATHS_prepend_$(MACHINE) := "${THISDIR}/${PN}_rel:"

SRC_URI = "file://config.conf "

SYSTEMD_PACKAGES = "${PN}"
SYSTEMD_SERVICE_${PN} = " mypkg.service"

do_install() {
         install -m 755 -d ${D}${bindir}
         install -m 755 -d ${D}${sysconfdir}
         install -m 644 ${WORKDIR}/config.conf ${D}${sysconfdir}/config.conf

         install -d ${D}${systemd_system_unitdir}
         install -m 644 ${WORKDIR}/mypkg.service ${D}${systemd_system_unitdir}/mypkg.service
}

编辑 2:
recipes-my/*meta-b 复制到 meta-c/ 也不起作用,并且安装了 meta-aconfig.conf

问题是添加到 FILESEXTRAPATHS 的目录顺序。
meta-b 中的 mypgk_1.0.bbappend 修改为:

FILESEXTRAPATHS_append_${MACHINE} := "${YOCTOROOT}/meta-a/recipes-my/${PN}/${PN}_rel:"  
FILESEXTRAPATHS_prepend_${MACHINE} := "${THISDIR}/${PN}:" 

解决了问题