Solution for anyone else down this path:
None of the components inside the multi-image are wrapped with mkImage.
* The Linux kernel image is just the plain 'Image' generated by the kernel build, zipped with gzip -v9 Image.
* The initrd is just a plain ol' ext3.gz
* The dtb is also that generated by the kernel build.
Put them together with:
mkimage -A arm -O linux -T multi -a 0x8000 -e 0x8000 -C gzip -n 'Multi image: kernel, initrd, dtb' -d Image.gz:rootfs.ext3.gz:socfpga_cyclone5_sockit.dtb mxImage
And to boot this on the target:
# fatload mmc 0 0x2000000 mxImage
# env set initrd_high 20000000
# env set bootargs console=ttyS0,115200 root=/dev/ram rw rootwait ramdisk_size=262144
# bootm 0x2000000
and you are off and running....
Environment size: 2124/4092 bytes
SOCFPGA_CYCLONE5# bootm 0x2000000
# # Booting kernel from Legacy Image at 02000000 ...
Image Name: Multi image
Image Type: ARM Linux Multi-File Image (gzip compressed)
Data Size: 31098663 Bytes = 29.7 MiB
Load Address: 00008000
Entry Point: 00008000
Contents:
Image 0: 3407854 Bytes = 3.2 MiB
Image 1: 27671608 Bytes = 26.4 MiB
Image 2: 19183 Bytes = 18.7 KiB
# # Loading init Ramdisk from multi component Legacy Image at 02000000 ...
# # Flattened Device Tree from multi component Image at 02000000
Booting using the fdt at 0x03da3c78
Uncompressing Multi-File Image ... OK
reserving fdt memory region: addr=0 size=1000
Loading Ramdisk to 1e59c000, end 1ffffc38 ... OK
Loading Device Tree to 03ff8000, end 03fffaee ... OK
Starting kernel ... <snip>
Have fun!
--George