问题描述
我是新来的,Yocto在imx6q
构建嵌入式系统。
我想在do_rootfs之后覆盖Linux系统文件。例如,目标系统文件如下所示。
/etc/网络/接口 /ETC/问题 /etc/init.d/rcs /home/root/myest.sh所以,我做了定制的层和定制的食谱。 HelloWorld二进制文件复制正常。 但是,未调用do_myask.
我的代码有什么问题? 或用于我的目的的任何其他方法。
#
# This file was derived from the 'Hello World!' example recipe in the
# Yocto Project Development Manual.
#
SUMMARY = "Simple helloworld application"
SECTION = "examples"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
SRC_URI = "file://helloworld.c"
S = "${WORKDIR}"
do_compile() {
${CC} helloworld.c -o helloworld
}
do_install() {
install -d ${D}${bindir}
install -m 0755 helloworld ${D}${bindir}
}
FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
SRC_URI += "
file://interfaces
file://issue
file://mytest.sh
"
addtask mytask after do_rootfs before do_image
do_mytask() {
install -d ${D}/etc/network
cp -af ${WORKDIR}/interfaces ${D}/etc/network/interfaces
cp -af ${WORKDIR}/issue ${D}/etc/issue
}
推荐答案
您需要扩展提供要替换的文件的配方。
以/etc/network/interfaces
为例,第一步是找出哪个配方安装了该文件。
从bitbake提示符:
$ oe-pkgdata-util find-path /etc/network/interfaces
init-ifupdown: /etc/network/interfaces
所以这告诉我们/etc/network/interfaces
是由init-ifupdown
接收方安装的。
文件搜索显示init-ifupdown
是POKY的一部分:
$ find . -name init-ifupdown*.bb
./poky/meta/recipes-core/init-ifupdown/init-ifupdown_1.0.bb
现在,由于您需要修改init-ifupdown
的输出,因此您需要通过在您自己的层中创建一个名称类似的.bbappend
来扩展init-ifupdown
。
您可以在
创建新的.bbappend
my-layer/receipes-core/init-ifupdown/init-ifupdown_%.bbappend
%
是通配符,可确保.bbappend
将应用于init-ifupdown
配方的所有未来版本,这可能是您想要的。
将您的自定义interfaces
文件放在.bbappend
下的文件夹中:
my-layer/receipes-core/init-ifupdown/files/interfaces
则.bbappend
只需包含一行即可使bitbake拾取新的interfaces
文件:
FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
最后,对要替换的每个系统文件重复上述操作。