如何使用 Yocto 将文件部署到 /boot 分区
How to deploy files to /boot partition with 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分区。所以它们在启动时不可用。
我已经搜索并研究了 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 我得到一个构建错误,因为内核配方试图像 dts 文件一样构建 dtbo 文件。
RPI 映像是使用 sdimage-raspberrypi.wks WIC wks 文件创建的。它包含:
part /boot --source bootimg-partition ...
所以它使用 bootimg-partition.py wic 插件来生成 /boot
分区。它复制由 IMAGE_BOOT_FILES
变量定义的每个文件。
看来你想添加一些devicetree覆盖,所以你需要修改machine configuration and more specifically RPI_KERNEL_DEVICETREE_OVERLAYS
variable. IMAGE_BOOT_FILES
variable is set in rpi-base.inc。
如果您没有定义任何自定义机器或自定义发行版,您可以将其添加到 local.conf:
RPI_KERNEL_DEVICETREE_OVERLAYS_append = " <deploy-path>/<dto-path>"
你可以看到here如何在部署目录中添加文件。
经过数小时的调查后发现,将文件部署到 / 以外的其他分区并不容易。我现在采用了 post 处理脚本的方式来装载最终图像,部署附加文件并卸载它。
# 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
我正在尝试将一些二进制文件部署到 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分区。所以它们在启动时不可用。
我已经搜索并研究了 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 我得到一个构建错误,因为内核配方试图像 dts 文件一样构建 dtbo 文件。
RPI 映像是使用 sdimage-raspberrypi.wks WIC wks 文件创建的。它包含:
part /boot --source bootimg-partition ...
所以它使用 bootimg-partition.py wic 插件来生成 /boot
分区。它复制由 IMAGE_BOOT_FILES
变量定义的每个文件。
看来你想添加一些devicetree覆盖,所以你需要修改machine configuration and more specifically RPI_KERNEL_DEVICETREE_OVERLAYS
variable. IMAGE_BOOT_FILES
variable is set in rpi-base.inc。
如果您没有定义任何自定义机器或自定义发行版,您可以将其添加到 local.conf:
RPI_KERNEL_DEVICETREE_OVERLAYS_append = " <deploy-path>/<dto-path>"
你可以看到here如何在部署目录中添加文件。
经过数小时的调查后发现,将文件部署到 / 以外的其他分区并不容易。我现在采用了 post 处理脚本的方式来装载最终图像,部署附加文件并卸载它。
# 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