I have a Zynq-7000 based board that uses QSPI to boot and eMMC to store the kernel. The QSPI contains BOOT.BIN (ie, FSBL, PL bitstream, U-Boot) and the eMMC contains image.ub (the FIT image with kernel, rootfs and DTB). Therefore, the two (bootloader and kernel) are not always in sync. It's possible to update the eMMC with a newer kernel but leave U-Boot alone.
If U-Boot from Petalinux 2017.4 (on QSPI) tries to load an image.ub from 2018.2, the following happens:
U-Boot 2017.01 (Feb 22 2018 - 10:45:13 -0800) Board: Xilinx Zynq DRAM: ECC disabled 512 MiB MMC: Card did not respond to voltage select! sdhci@e0100000 - probe failed: -95 sdhci_transfer_data: Error detected in status(0x208000)! Card did not respond to voltage select! SF: Detected n25q128 with page size 256 Bytes, erase size 64 KiB, total 16 MiB *** Warning - bad CRC, using default environment In: serial Out: serial Err: serial U-BOOT for MiniZed Hit any key to stop autoboot: 0 boot Petalinux reading image.ub 34487736 bytes read in 11877 ms (2.8 MiB/s) ## Loading kernel from FIT Image at 10000000 ... Using 'firstname.lastname@example.org' configuration Trying 'kernel@1' kernel subimage Description: Linux kernel Type: Kernel Image Compression: gzip compressed Data Start: 0x10000104 Data Size: 3636380 Bytes = 3.5 MiB Architecture: ARM OS: Linux Load Address: 0x00008000 Entry Point: 0x00008000 Hash algo: sha1 Hash value: 4a47a1db3bbecb65e7fcb67908ac1cca4965d01c Verifying Hash Integrity ... sha1+ OK ## Loading ramdisk from FIT Image at 10000000 ... Using 'email@example.com' configuration Trying 'ramdisk@1' ramdisk subimage Description: petalinux-user-image Type: RAMDisk Image Compression: gzip compressed Data Start: 0x1037c054 Data Size: 30832598 Bytes = 29.4 MiB Architecture: ARM OS: Linux Load Address: unavailable Entry Point: unavailable Hash algo: sha1 Hash value: 569a51e69f8a29b58c25d7c9b1529fc3f310051a Verifying Hash Integrity ... sha1+ OK ## Loading fdt from FIT Image at 10000000 ... Using 'firstname.lastname@example.org' configuration Trying 'email@example.com' fdt subimage Description: Flattened Device Tree blob Type: Flat Device Tree Compression: uncompressed Data Start: 0x10377ea0 Data Size: 16625 Bytes = 16.2 KiB Architecture: ARM Hash algo: sha1 Hash value: 01130f4c9f84719b08b7a87918f58c29be0dc508 Verifying Hash Integrity ... sha1+ OK Booting using the fdt blob at 0x10377ea0 Uncompressing Kernel Image ... Error: inflate() returned -5 Image too large: increase CONFIG_SYS_BOOTM_LEN Must RESET board to recover resetting ...
The opposite (U-Boot 2018.2 loading a 2017.4 image.ub) doesn't have the same issue and boots normally.
I noticed that starting with 2018.x the kernel portion of the FIT image is compressed. In 2017.4, it isn't compressed.
Is there any way to create a FIT image using Petalinux 2018.2 that's backwards compatible with U-Boot from 2017.x?
Yes backward compatibility is not possible.
2018.x release is based on 4.14 kernel which is tested with u-boot version v2018.1 not using v2017.01
Refer PetaLinux release notes https://www.xilinx.com/support/answers/71201.html