我正在尝试将某些二进制文件部署到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目录中)的机制。根映像)。
我们将不胜感激:)
在我的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文件)。
答案 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