Yocto使用.bbappend文件覆盖默认initramfs的初始脚本编写

16

我正在尝试编写一个 .bbappend 文件,以附加到 initramfs-live-boot_1.0.bb,该文件在 do_install() 中包含一个语句,该语句将 init-live.sh 的内容(一个管理引导过程的 shell 脚本)写入 init,这是一个在启动时运行的初始化脚本。我的 .bbappend 文件的目的是引用修改后的启动脚本的副本,以代替原始脚本而不更改基本的 openembedded-core 和/或 poky 环境。因此,我的版本的启动脚本和 .bbappend 文件与我的其他配方一起放置在项目目录中进行构建。

我的 initramfs-live-boot_1.0.bbappend 如下所示:

SUMMARY = "Replacement recipe"
FILESEXTRAPATH_prepend := "${THISDIR}/files:"
SRC_URI += "file://init.sh"

do_install_append() {
        install -m 0755 ${WORKDIR}/init.sh ${D}/init
}

我的问题是,当我尝试构建镜像时,它会报出以下错误:

在与.bbappend文件相同的目录中,我有一个名为files的文件夹,其中包含应从中读取的init.sh脚本。

WARNING: Failed to fetch URL file://init.sh, attempting MIRRORS if available

然后尝试在 poky 目录中查找缺失的文件,而不是在我的项目目录中查找。

我是否错误地编写了我的 .bbappend 文件?如何使用 .bbappend 文件编辑 initramfs 脚本?

1个回答

21

FILESEXTRAPATH_prepend := "${THISDIR}/files:" 应该改为 FILESEXTRAPATHS_prepend := "${THISDIR}/files:",注意在FILESEXTRAPATHS中有一个额外的S。

这样就可以让你的工作正常了。

另一个改进是将文件名从init.sh改为init-live.sh。即使用与原始initramfs-live-boot配方中的文件相同的名称。这样可以删除你的do_install_append()函数以及bbappend中的SRC_URI += "file://init.sh"。配方本身会为你处理这些事情。因此,你实际上只需要一行代码:FILESEXTRAPATHS_prepend := "${THISDIR}/files:"


所以,为了澄清,我在我的 .bbappend 中只需要 FILESEXTRAPATHS_prepend := "${THISDIR}/files:" 吗? - Shiri
是的,假设您将文件命名为“init-live.sh”,就像原始文件一样。 - Anders
太棒了!谢谢你的回答,我刚刚尝试了一下,它没有报错。 - Shiri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接