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

Yocto using .bbappend file to override writing of default init scripts for initramfs

我正在尝试编写一个 .bbappend 文件,该文件将附加到 initramfs-live-boot_1.0.bb 中,该文件在 do_install() 中有一个语句写入 init-live.sh 的内容,一个shell 管理启动过程的脚本,init,一个在启动时运行的初始化脚本。我的 .bbappend 文件的目的是引用要复制的启动脚本的修改版本来代替原始版本,而不更改基础 openembedded-core and/or 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 脚本?

FILESEXTRAPATH_prepend := "${THISDIR}/files:" 应该是 FILESEXTRAPATHS_prepend := "${THISDIR}/files:"。注意 FILESEXTRAPATHS.

中的最后一个 S

这应该适合您。

另一个改进是将文件文件从 init.sh 重命名为 init-live.sh。 IE。使用与原始 initramfs-live-boot 食谱中的文件相同的名称。这将允许您从 bbappend 中删除 do_install_append()-函数以及 SRC_URI += "file://init.sh"。食谱本身会为你处理这些。因此,您真正需要的唯一一行是 FILESEXTRAPATHS_prepend := "${THISDIR}/files:".