我正在尝试将一些二进制文件部署到 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 文件。
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>"
您可以看到这里如何在部署目录中添加文件。
过去几天我一直在解决将文件部署到
/boot
分区的问题,并提出了解决方案。以下说明适用于 Yocto Kirkstone 4.0.1。
如果使用
linux-raspberrypi
,请将其作为依赖项添加到您的配方中,与用于编译设备树文件的dtc-native
相同。
DEPENDS:append = " linux-raspberrypi"
DEPENDS:append = " dtc-native"
准备您的配方,以便将文件部署到
${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
要将文件刻录到
/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
这应该有效!
经过长时间的调查,结果发现,将文件部署到 / 之外的其他分区并不容易。我现在采用后处理脚本的方式来安装最终图像,部署附加文件并卸载它。
# 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