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

Ale*_*ian 5 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/
}
Run Code Online (Sandbox Code Playgroud)

这些文件部署到最终映像的 / 分区中的 /boot,但不部署到 /boot 分区。所以它们在启动时不可用。

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

任何帮助表示赞赏:)

更新 #1

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

IMAGE_BOOT_FILES_append = " \
  overlays/3dlab-nano-player.dtbo \
  overlays/adau1977-adc.dtbo \
  ...
"
Run Code Online (Sandbox Code Playgroud)

在我的 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
}
Run Code Online (Sandbox Code Playgroud)

使用此映像构建,但文件仍未部署在 /boot 分区中。使用 RPI_KERNEL_DEVICETREE_OVERLAYS 我得到一个构建错误,因为内核配方试图构建 dtbo 文件,如 dts 文件。

小智 1

在过去的几天里,我一直在解决将文件部署到分区的问题/boot,并提出了一个解决方案。以下说明适用于Yocto Kirkstone 4.0.1

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

    DEPENDS:append = " linux-raspberrypi"
    DEPENDS:append = " dtc-native"
    
    Run Code Online (Sandbox Code Playgroud)
  2. 准备您的配方,以便将文件部署到${DEPLOYDIR}存储最终映像文件的目录。从类继承,添加任务deploy很重要。下面的函数假设所有文件都已编译并准备好部署。deployaddtaskdo_deploy

    inherit deploy
    
    do_deploy() {
        install -m 0664 ${S}/adau1977-adc.dtbo ${DEPLOYDIR}/adau1977-adc.dtbo
    }
    
    addtask deploy after do_compile
    
    Run Code Online (Sandbox Code Playgroud)
  3. 要将文件刻录到分区上的指定目录/boot,请使用以下变量的合成IMAGE_BOOT_FILES

    IMAGE_BOOT_PARTITION:append = " file_name_in_deploydir;path/on/boot/filename.extension"
    
    Run Code Online (Sandbox Code Playgroud)

    例如

    IMAGE_BOOT_PARTITION:append = " adau1977-adc.dtbo;overlays/adau1977-adc.dtbo"
    
    Run Code Online (Sandbox Code Playgroud)

    把这一行放入你的local.conf

这应该有效!