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

问题描述 投票:0回答:3

我正在尝试将一些二进制文件部署到 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 文件。

linux embedded yocto
3个回答
4
投票

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

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

所以它使用bootimg-partition.py wic插件来生成

/boot
分区。它复制由
IMAGE_BOOT_FILES
变量定义的每个文件。

您似乎想添加一些设备树覆盖,因此您需要修改 machine 配置,更具体地说是

RPI_KERNEL_DEVICETREE_OVERLAYS
变量。
IMAGE_BOOT_FILES
变量在rpi-base.inc中设置。

如果您没有定义任何自定义机器或自定义发行版,您可以将其添加到 local.conf 中:

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

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


1
投票

过去几天我一直在解决将文件部署到

/boot
分区的问题,并提出了解决方案。以下说明适用于 Yocto Kirkstone 4.0.1

  1. 如果使用

    linux-raspberrypi
    ,请将其作为依赖项添加到您的配方中,与用于编译设备树文件的
    dtc-native
    相同。

    DEPENDS:append = " linux-raspberrypi"
    DEPENDS:append = " dtc-native"
    
  2. 准备您的配方,以便将文件部署到

    ${DEPLOYDIR}
    - 存储最终图像文件的目录。继承
    deploy
    类,用
    deploy
    添加
    addtask
    任务很重要。下面的
    do_deploy
    函数假设所有文件都已编译并准备好部署。

    inherit deploy
    
    do_deploy() {
        install -m 0664 ${S}/adau1977-adc.dtbo ${DEPLOYDIR}/adau1977-adc.dtbo
    }
    
    addtask deploy after do_compile
    
  3. 要将文件刻录到

    /boot
    分区上的指定目录,请使用以下
    IMAGE_BOOT_FILES
    变量语法:

    IMAGE_BOOT_PARTITION:append = " file_name_in_deploydir;path/on/boot/filename.extension"
    

    例如

    IMAGE_BOOT_PARTITION:append = " adau1977-adc.dtbo;overlays/adau1977-adc.dtbo"
    

    将此行放入您的

    local.conf

这应该有效!


1
投票

经过长时间的调查,结果发现,将文件部署到 / 之外的其他分区并不容易。我现在采用后处理脚本的方式来安装最终图像,部署附加文件并卸载它。

# 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
© www.soinside.com 2019 - 2024. All rights reserved.