首页 > 解决方案 > 如何在 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() 尝试了不同的“配置”,但它们没有用。(当我做“bitbake core-image-base”时没有问题,但是在rootfs中没有应用补丁)

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

标签: patchyoctobitbakerecipe

解决方案


如果要修补现有的配方文件,则需要创建一个openssh_%.bbappend文件而不是test_1.0.bb并将每个要替换的文件放入SRC_URI(ie 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"local.conf


推荐阅读