如何使用 Yocto 修改 rootfs 配置文件?

How do I modify a rootfs configuration file with Yocto?

我正在使用 Thud (2.6),我想清除 /etc/default/dropbear 的内容。 ROOTFS_POSTPROCESS_COMMAND 看起来很有希望,但以下未能创建空文件。没有错误。

食谱完成的其他工作成功。

SRC_URI += "file://authorized_keys"
SRC_URI += "file://dropbear_rsa_host_key"
# Configuration file to be installed in /etc/default.
# SRC_URI += "file://dropbear"

S = "${WORKDIR}"

do_install() {

install -d ${D}/etc/dropbear
install -m 0600 ${S}/authorized_keys ${D}/etc/dropbear
install -m 0600 ${S}/dropbear_rsa_host_key ${D}/etc/dropbear

}

clear_dropbear_default_configuration() {

rm ${D}/etc/default/dropbear
touch ${D}/etc/default/dropbear
echo "Hello" > hello.txt

}

FILES_${PN} += "/etc/dropbear"

FILES_${PN} += "/etc/dropbear/authorized_keys"

FILES_${PN} += "/etc/dropbear/dropbear_rsa_host_key"

ROOTFS_POSTPROCESS_COMMAND += "clear_dropbear_default_configuration;"

# FILES_${PN} += "/etc/default/dropbear"

我相信 ROOTFS_POSTPROCESS_COMMAND 是您想要的,但您不能从这样的包配方中调用它。在我们的应用程序中,我们在与 .bb 图像创建配方相同的目录中创建了一个具有一些常用功能的新 .inc 文件,并将其包含在构建目标图像的配方中。这是我们放置这些指令和函数的地方(我有 4 个用于创建符号链接和重置 root 密码)。挑战在于后处理无法再次调用您的食谱,而且我不确定尝试预先声明这样的函数以便稍后调用它可能会如何工作。请注意,语法看起来完全正确,只是在需要时不在 运行 的正确位置。

image-base.inc

ROOTFS_POSTPROCESS_COMMAND += "clear_dropbear_default_configuration;"

clear_dropbear_default_configuration() {
    rm ${D}/etc/default/dropbear
    touch ${D}/etc/default/dropbear
    echo "Hello" > hello.txt
}

image-name.bb

require image-base.inc

如果需要,您也可以直接将其添加到作为您的 bitbake 的 .bb。我喜欢 .inc 文件,因为它们可以更轻松地在相似的条目之间共享。请注意,此示例忽略了其他内容,但您可以在其所属的位置自由变形。

如果您不想更改现有目标,可以创建自己的目标,然后在新图像配方中要求 image.bb。