embedded-linuxfpgakernel-moduledevice-tree

How to remove/unload a device tree overlay to program FPGA multiple times?


I can program the FPGA part of an Altera/Intel Cyclone V SoC FPGA with a firmware, from Linux on the HPS (ARM core in the SoC FPGA), using Buildroot. I'm using a device tree overlay to write a raw binary file (.rbf) to the FPGA with configfs.

mount -t configfs none /sys/kernel/config
mkdir -p /sys/kernel/config/device-tree/overlays/ov_soc_firmware_fpga
echo ov_soc_firmware_fpga.dtb > /sys/kernel/config/device-tree/overlays/ov_soc_firmware_fpga/path

But if I issue the echo command again, I get this error: "sh: write error: Operation not permitted". I tried to umount/mount, but it doesn't help.

How can I reprogram the FPGA without rebooting?


Solution

  • Unloading the overlay is actually really simple. You do rmdir /the/path/to/overlay, and it gets unloaded.

    In your case it should be rmdir /sys/kernel/config/device-tree/overlays/ov_soc_firmware_fpga.

    After unloading you re-run your part starting with mkdir /path/to/overlay to get new .rbf loaded.

    Note, do not unmount configfs itself.