如何在yocto中将文件安装到/boot



我需要将一个文件添加到由yocto构建生成的/boot目录中。我已经创建了一个尝试做到这一点的配方:

SRCREV = "48cabcbc64484ca6c201746e526a11b4b43eb359"
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
SRC_URI += "file://0001-uEnv.patch file://0002-disable-boot-interrupt.patch file://uEnv.txt"
FILES_${PN} += "/boot/uEnv.txt"
do_install_append() {
install -m 0744    ${WORKDIR}/uEnv.txt       ${D}/${base_prefex}/boot
}

这个配方也对u-boot进行了一些修补,但目前我只对试图将uEnv.txt添加到引导目录的部分感兴趣。我知道这个配方正在加工中。例如,如果重命名uEnv.txt文件,它会引发一个错误。所以我知道它正在尝试安装它。但当我检查yocto创建的rootfs时,文件不见了。

有人知道我做错了什么吗?也许问题出在${D}/${base_prefex}/boot上,而我只是没有把它放在正确的位置?不过,我试过把它放在其他地方,比如${D}${sysconfdir}/,但没有成功。

以下是您可以尝试的一些想法:

u-boot已经有一个变量可用于Env文件(检查poky/meta/recipes-bsp/u-boot/u-boot.inc)

它检查UBOOT_ENV变量(如果存在),并将其复制到/boot:

do_install() {
...
if [ -n "${UBOOT_ENV}" ]
then
install -m 644 ${WORKDIR}/${UBOOT_ENV_BINARY} ${D}/boot/${UBOOT_ENV_IMAGE}
ln -sf ${UBOOT_ENV_IMAGE} ${D}/boot/${UBOOT_ENV_BINARY}
fi
...
}
do_deploy() {
...
if [ -n "${UBOOT_ENV}" ]
then
install -m 644 ${WORKDIR}/${UBOOT_ENV_BINARY} ${DEPLOYDIR}/${UBOOT_ENV_IMAGE}
rm -f ${DEPLOYDIR}/${UBOOT_ENV_BINARY} ${DEPLOYDIR}/${UBOOT_ENV_SYMLINK}
ln -sf ${UBOOT_ENV_IMAGE} ${DEPLOYDIR}/${UBOOT_ENV_BINARY}
ln -sf ${UBOOT_ENV_IMAGE} ${DEPLOYDIR}/${UBOOT_ENV_SYMLINK}
fi
...
}

我假设您的配方是ubootbbappend,因为它有一个补丁。

因此,您可以尝试以下操作:

SRCREV = "48cabcbc64484ca6c201746e526a11b4b43eb359"
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
SRC_URI += "file://0001-uEnv.patch file://0002-disable-boot-interrupt.patch file://uEnv.txt"
UBOOT_ENV = "uEnv"
UBOOT_ENV_SUFFIX = "txt"

更需要注意的是,如果你的Uboot试图从rootfs/boot获取uEnv.txt文件,那么这是可以的,但如果它试图从boot分区获取它(如果你有),那么你应该用(在你的机器配置文件或本地配置文件中)将它添加到该分区:

BOOT_FILES_append = " uEnv.txt"

最新更新