【问题标题】:How do I add script files to a Raspberry Pi filesystem using a custom Yocto recipe?如何使用自定义 Yocto 配方将脚本文件添加到 Raspberry Pi 文件系统?
【发布时间】:2025-11-30 17:25:01
【问题描述】:

我有一个适用于 RaspberryPi3 的 Yocto 图像。我想添加 3 个脚本文件 /etc/ppp/peers/.我原以为将非编译文件添加到根文件系统是一件相当通用的事情,但我能找到的唯一示例是使用编译文件并继承 autotools 配方。

有没有示例说明如何将文本文件或脚本文件添加到 Yocto 根文件系统中?
一个如何编写或一个现有的配方,它采用一组文本文件并将它们放置到目标的 rootfs 上。

我一定是遗漏了一些东西,因为我无法将文件文件导入系统。
我尝试使用 do_deploy,但这会将文件放入我的 ../tmp/deploy/images/raspberrypi3/etc/ppp/ 中,这将有助于脚本帮助映像部署。这不是我想要的,因为脚本需要在目标上。

运行带有或不带有空白 do_compile() 的 do_install() 也不会导致事情到达目标。除非有关于使用特定于 Pi 的 ${sysconfdir} 或 ${IMAGE_ROOTFS} 或 ${S} 或 ${D} 或 ${DEPLOYDIR} 或 ${WORKDIR} 的东西。我会提供一个我的脚本示例,但是在过去两天中已经多次更改它,因此只分享一次迭代并没有多大价值。

任何类似于以下内容的内容; ${IMAGE_ROOTFS} 可能替代了 ${D} 或缺失 do_install 替换为 do_deploy。
我可能尝试过其他排列。

#
# Copy the ppp script files for <vendor> chips to the target filesystem
# These files are based on the details provided in 
#

SUMMARY = "PPP Scripts for ..."
SECTION = "net"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
DESCRIPTION = "A set of Linux PPP scripts blar blar"

RDEPENDS_${PN} = "ppp"

SRC_URI += "file://<provider>-ppp"
SRC_URI += "file://<provider>-chat-connect"
SRC_URI += "file://<provider>-chat-disconnect"

S = "${WORKDIR}"

#PACKAGES =+ "${PN} ${PN}-staticdev"

#DEPLOYDIR = "${WORKDIR}/deploy-${PN}"

#D = "${DEPLOYDIR}"

inherit allarch

# Install script on target's root file-system
do_install () {
    # Install init script and default settings
    install -d ${IMAGE_ROOTFS}${sysconfdir}
    install -d ${IMAGE_ROOTFS}${sysconfdir}/ppp/
    install -d ${IMAGE_ROOTFS}${sysconfdir}/ppp/peers/
    install -m 0755 ${S}/<provider>-ppp ${IMAGE_ROOTFS}${sysconfdir}/ppp/peers/
    install -m 0755 ${S}/<provider>-chat-connect ${IMAGE_ROOTFS}${sysconfdir}/ppp/peers/
    install -m 0755 ${S}/<provider>-chat-disconnect ${IMAGE_ROOTFS}${sysconfdir}/ppp/peers/
}

# Mark the files which are part of this package
FILES_${PN} += "${sysconfdir}/ppp/"
FILES_${PN} += "${sysconfdir}/ppp/peers/"
FILES_${PN} += "${sysconfdir}/ppp/peers/<provider>-ppp"
FILES_${PN} += "${sysconfdir}/ppp/peers/<provider>-chat-connect"
FILES_${PN} += "${sysconfdir}/ppp/peers/<provider>-chat-disconnect"

我可以找到很多 helloworld.c 和自动化示例。在某处添加脚本必须有一些基本的吗?我的googlefu很虚弱,怪我心有余悸。

【问题讨论】:

    标签: raspberry-pi raspberry-pi3 yocto ppp


    【解决方案1】:

    你应该在你的食谱中使用install -m 0755 ${WORKDIR}/&lt;provider&gt;-ppp ${D}${sysconfdir}/ppp/peer。您是否已将生成的包添加到您的图像配方中?您可以查看${WORKDIR}/packages-split/${PN} 以确认您的文件已正确打包。

    【讨论】:

    • 谢谢。使用${D}${sysconfdir}/ppp/peer 而不是${IMAGE_ROOTFS}${sysconfdir}/ppp/peers 是我面临的关键问题。知道 ${WORKDIR}/packages-split/${PN} 应该在那里并且填充也非常有帮助。