如何将linux系统文件覆盖到yocto文件系统中?

dev*_*v j 1 linux recipe rootfs yocto

我是新的,yocto 在imx6q嵌入式系统中构建。

我想在 do_rootfs 之后覆盖 linux 系统文件。例如,目标系统文件如下。

  • /etc/网络/接口
  • /etc/问题
  • /etc/init.d/rcS
  • /home/root/mytest.sh

所以,我制作了自定义图层和自定义配方。helloworld 二进制文件可以复制。
但是,不调用 do_mytask 函数。

我的代码有什么问题?或任何其他方法用于我的目的。

#
# 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
}
Run Code Online (Sandbox Code Playgroud)

Car*_*sen 5

您需要扩展提供要替换的文件的配方。

使用/etc/network/interfaces作为一个例子,第一个步骤是找出哪些配方安装该文件。

从 bitbake 提示:

$ oe-pkgdata-util find-path /etc/network/interfaces
init-ifupdown: /etc/network/interfaces
Run Code Online (Sandbox Code Playgroud)

所以这告诉我们这/etc/network/interfaces是由init-ifupdownreceipe安装的。

文件搜索显示它init-ifupdown是 poky 的一部分:

$ find . -name init-ifupdown*.bb
./poky/meta/recipes-core/init-ifupdown/init-ifupdown_1.0.bb
Run Code Online (Sandbox Code Playgroud)

现在,由于您需要修改 的输出init-ifupdown,您需要通过在您自己的层中创建一个类似命名的来进行扩展init-ifupdown.bbappend

您可以.bbappend

my-layer/receipes-core/init-ifupdown/init-ifupdown_%.bbappend
Run Code Online (Sandbox Code Playgroud)

%是一个通配符,可确保.bbappend将应用于init-ifupdown配方的所有未来版本,这可能是您想要的。

将您的自定义interfaces文件放在以下文件夹中.bbappend

my-layer/receipes-core/init-ifupdown/files/interfaces
Run Code Online (Sandbox Code Playgroud)

.bbappend则仅需要包含一个单行bitbake的启用拿起新的interfaces文件:

FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
Run Code Online (Sandbox Code Playgroud)

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