如何将Linux系统文件覆盖到Yocto文件系统中?

人气:757 发布:2022-10-16 标签: linux yocto rootfs recipe

问题描述

我是新来的,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:"

最后,对要替换的每个系统文件重复上述操作。

814