我是新来的,是在imx6q
嵌入式系统上构建的。
我想在do_rootfs之后覆盖linux系统文件。例如,目标系统文件在下面。
所以,我做了定制层和定制配方。
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
}
答案 0 :(得分:1)
取决于要修改的文件。例如,如果您在朴素的目录中搜索“接口”,则会在“元/配方核心/ init-ifupdown / init-ifupdown-$ {PV} /”中找到它。您只需要在元数据中创建一个名为init-ifupdown-$ {PV} .bbappend的配方,即可重新创建poky中可见的路径(recipes-core / init-ifupdown /)。该食谱可以包含一行:
FILESEXTRAPATHS_prepend: = "${THISDIR}/files:"
然后,使用所需的“ interfaces”文件创建一个“ files”文件夹。
对于“问题”,就像在/ etc目录(配置文件,fstab等)中找到的其他问题一样,其过程相同,其来源在poky / meta / recipes-core / base-files /中。 >
对于init.d脚本,请使用'update-rc'类。
答案 1 :(得分:1)
您的配方不是“图像配方”(并且不应用于问候世界),因此在这种情况下,您不能使用任务do_rootfs和do_image。需要澄清的一点是:图像配方是.bb文件,可用于通过bitbake或devtool构建图像(在您的情况下,某些包含imx6q,则可以使用bitbake-layers show-recipes "*-image-*"
找到它们)。
看来您正在寻找一种真正的重写do_install的方法,该方法可以安装提到的文件。然后找到安装这些文件的配方,然后在顶层创建bbappend文件。此bbappend文件可能包含do_install_append个任务,您可以在其中放置install <file> <dir>
行(请注意,不建议使用cp
,所有操作都应通过安装工具完成)。
答案 2 :(得分:1)
根据 Carsten Hansen 为 Xilinx/Petalinux 工作人员的原始答案添加额外评论。
在 Petalinux 环境下,我们并没有真正的命令:oe-pkgdata-util,所以策略是在 Xilinx SDK 文件夹中进行搜索。根据文档,您可能将它安装在 /opt 下的 Linux 上。如果你这样做:
grep -r syslog-startup.conf .
您将看到 busybox 方法是安装 syslog-startup.conf 的方法。
您可以在以下位置创建名为 busybox_%.bbappend 的覆盖配方:
../project-spec/meta-user/recipes-core/busybox/
将修改后的 syslog-startup.conf 文件放在:
../project-spec/meta-user/recipes-core/busybox/files/syslog-startup.conf
通过 petalinux-build 重建。您还可以通过 petalinux-build -c rootfs 强制创建 rootfs,系统应该会填充您的新文件。
答案 3 :(得分:0)
您需要扩展提供要替换文件的配方。
以/etc/network/interfaces
为例,第一步是弄清楚哪个配方安装了该文件。
从位烘烤提示:
$ 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
的输出,因此需要通过自己创建一个类似命名的init-ifupdown
来扩展 .bbappend
层。
您可以在以下位置创建新的.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:"
最后,对要替换的每个系统文件重复以上操作。