如何使用Yocto将文件部署到/ boot分区

时间:2019-07-06 12:57:57

标签: linux embedded yocto

我正在尝试将某些二进制文件部署到RPi CM3的Yocto映像中的/ boot中,但是它将它们部署到错误的位置。

do_install() {
    install -d ${D}/boot/overlays
    install -m 0664 ${WORKDIR}/*.dtb ${D}/boot/overlays/
    install -m 0664 ${WORKDIR}/*.dtbo ${D}/boot/overlays/
}

文件将部署到最终映像的/分区中的/ boot,而不部署到/ boot分区中。因此它们在启动时不可用。

我已经用Google搜索并研究了Poky发行版的内核配方(和类),但是我没有找到它用来确保将文件部署到启动映像(而不是部署到/ boot目录中)的机制。根映像)。

我们将不胜感激:)

更新#1

在我的local.conf中,我做了:

IMAGE_BOOT_FILES_append = " \
  overlays/3dlab-nano-player.dtbo \
  overlays/adau1977-adc.dtbo \
  ...
"

在我的rpi3-overlays.bb

do_deploy() {
    install -d ${DEPLOYDIR}/${PN}
    install -m 0664 ${WORKDIR}/*.dtb ${DEPLOYDIR}/${PN}
    install -m 0664 ${WORKDIR}/*.dtbo ${DEPLOYDIR}/${PN}

    touch ${DEPLOYDIR}/${PN}/${PN}-${PV}.stamp
}

使用此映像可以构建,但是文件仍未部署在/ boot分区中。 使用RPI_KERNEL_DEVICETREE_OVERLAYS会出现构建错误,因为内核配方试图构建dtbo文件(如dts文件)。

2 个答案:

答案 0 :(得分:2)

RPI图像是使用sdimage-raspberrypi.wks WIC wks文件创建的。它包含:

part /boot --source bootimg-partition ...

因此它使用bootimg-partition.py wic插件来生成/boot分区。它将复制IMAGE_BOOT_FILES变量定义的每个文件。

似乎您想添加一些设备树覆盖,因此您需要修改machine配置,尤其是RPI_KERNEL_DEVICETREE_OVERLAYS变量。在rpi-base.inc中设置了IMAGE_BOOT_FILES变量。

如果未定义任何自定义计算机或自定义发行版,则可以将其添加到local.conf中:

RPI_KERNEL_DEVICETREE_OVERLAYS_append = " <deploy-path>/<dto-path>"

您可以看到here如何在部署目录中添加文件。

答案 1 :(得分:0)

经过大量的调查,结果发现将文件部署到/以外的其他分区并不容易。现在,我采用了一种后处理脚本的方式,该脚本可以挂载最终映像,部署其他文件并将其卸载。

# Ensure the first loopback device is free to use
sudo -n losetup -d /dev/loop0 || true

# Create a loopback device for the given image
sudo -n losetup -Pf ../deploy/images/bapi/ba.rootfs.rpi-sdimg

# Mount the loopback device
mkdir -p tmp
sudo -n mount /dev/loop0p1 tmp

# Deploy files
sudo -n cp -n ../../meta-ba-rpi-cm3/recipes-core/rpi3-overlays/files/* tmp/overlays/
sudo -n cp ../../conf/config.txt tmp/config.txt
sudo -n cp ../../conf/cmdline.txt tmp/cmdline.txt

# Unmount the image and free the loopback device
sudo -n umount tmp
sudo -n losetup -d /dev/loop0