构建机器时安装了错误的文件
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
- mypgk_1.0.bb:
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
- mypgk_1.0.bb追加:
FILESEXTRAPATHS_prepend_${MACHINE} := "${YOCTOROOT}/meta-a/recipes-my/${PN}/${PN}_rel:"
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
SRC_URI += "file://config.conf "
我还有一个meta-c
层。
meta-c
取决于 meta-b
,
meta-b
取决于 meta-a
.
图层优先级:
meta-a
= 14
meta-b
= 15
meta-c
= 16
每一层定义一个机器(machinea
, machineb
, machinec
)
当我构建 machinea
时,安装了来自 meta-a
的 config.conf
文件。
当我构建 machineb
时,安装了来自 meta-b
的 config.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-a
的 config.conf
问题是添加到 FILESEXTRAPATHS
的目录顺序。
将 meta-b
中的 mypgk_1.0.bbappend
修改为:
FILESEXTRAPATHS_append_${MACHINE} := "${YOCTOROOT}/meta-a/recipes-my/${PN}/${PN}_rel:"
FILESEXTRAPATHS_prepend_${MACHINE} := "${THISDIR}/${PN}:"
解决了问题
我有3层:
meta-a:
meta-a
└── recipes-my
└── mypgk
├── mypgk_1.0.bb
└── mypkg_rel
├── config.conf
└── mypkg.service
- mypgk_1.0.bb:
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
- mypgk_1.0.bb追加:
FILESEXTRAPATHS_prepend_${MACHINE} := "${YOCTOROOT}/meta-a/recipes-my/${PN}/${PN}_rel:"
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
SRC_URI += "file://config.conf "
我还有一个meta-c
层。
meta-c
取决于meta-b
,meta-b
取决于meta-a
.
图层优先级:
meta-a
= 14meta-b
= 15meta-c
= 16
每一层定义一个机器(machinea
, machineb
, machinec
)
当我构建 machinea
时,安装了来自 meta-a
的 config.conf
文件。
当我构建 machineb
时,安装了来自 meta-b
的 config.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-a
的 config.conf
问题是添加到 FILESEXTRAPATHS
的目录顺序。
将 meta-b
中的 mypgk_1.0.bbappend
修改为:
FILESEXTRAPATHS_append_${MACHINE} := "${YOCTOROOT}/meta-a/recipes-my/${PN}/${PN}_rel:"
FILESEXTRAPATHS_prepend_${MACHINE} := "${THISDIR}/${PN}:"
解决了问题