如何在 yocto 配方中对根文件系统中的文件应用补丁

How to apply a patch to a file in the root file system in yocto recipe

我想给 rootfs 的 /etc 中的文件打补丁。所以我创建了一个 Yocto 食谱

├── test_1.0.bb
└── files
    └── sshd.patch

我已经开始创建 .bb 文件,如下所示:

DESCRIPTION = "Patch files"
SECTION = "Patch"
LICENSE = "MIT"

FILESEXTRAPATHS_prepend := "${THISDIR}/files:"

SRC_URI = " \
    file://sshd.patch \
"

我用 do_install() 尝试了不同的 "configuration",但它们没有用。 (当我这样做时 "bitbake core-image-base" 没有问题,但是在 rootfs 中没有应用补丁)

*英语不是我的母语;请原谅我的任何错误。

如果您想修补现有的配方文件,您需要创建一个 openssh_%.bbappend 文件而不是 test_1.0.bb 并将每个文件替换为 SRC_URI(即 file://sshd_config) 而不是 sshd.patch

然后,由于这些文件已经存在,您无需修改​​ do_install 原始配方。否则你需要添加

do_install_append(){
    install -Dm 0644 ${S}/myfile ${D}${sysconfdir}/example/myfile 
}

# and modify FILES_${PN} if file is added in unusual place

顺便说一下,如果不发生冲突,一个配方无法覆盖另一个配方文件,因此另一种解决方案是在创建 rootfs 时对其进行修补,ROOTFS_POSTPROCESS_COMMAND。 (这就是为什么你不能为此使用 test_0.1.bb 的原因)。

否则,补丁文件会自动应用,因此您无需修改​​ do_patch 或 do_install。

如果您添加食谱,请不要忘记将其添加到图像中 IMAGE_INSTALL_append = " test" in local.conf 在您的情况下。