U-Boot supports a type of image, the “flattened image tree”, which is inspired by (and built on top of) “flattened device trees”.

These images contain one or more kernels, FDTs and ramdisks, optionally compressed and checksummed.

I’ve been packing kernels for the cubox with the following ITS source.

Compile with mkimage -f file.its out.itb.

/dts-v1/;

/ {
        description = "linux with fdt";
        #address-cells = <1>;

        images {
                kernel@1 {
                        description = "Linux armv7l";
                        data = /incbin/("arch/arm/boot/zImage");
                        type = "kernel";
                        arch = "arm";
                        os = "linux";
                        compression = "none";
                        load = <0x00008000>;
                        entry = <0x00008000>;
                        hash@1 {
                                algo = "crc32";
                        };
                };
                fdt@1 {
                        description = "Flattened Device Tree blob";
                        data = /incbin/("arch/arm/boot/dts/dove-cubox.dtb");
                        type = "flat_dt";
                        arch = "arm";
                        compression = "none";
                        hash@1 {
                                algo = "crc32";
                        };
                };
        };

        configurations {
                default = "config@1";
                config@1 {
                        description = "Kernel with Device Tree";
                        kernel = "kernel@1";
                        fdt = "fdt@1";
                };
        };
};