How to Deploy initramfs External to Kernel on i.MX8

So I believe the options are:

  • Bootm - uImage format
  • Booti - Image format (newest version of U-Boot has Booti support Image.gz)
  • Bootz - zImage format

So I tried just unzipping my Image.gz after reading this. So now my commands are:

env default -f -a; saveenv
usb start
run setup
setenv fdt_file imx8qm-apalis-v1.1-eval.dtb 
setenv boot_file Image.gz
saveenv
load usb 0:1 ${ramdisk_addr_r} initramfs.img #load the initrd into RAM
load mmc 0:1 ${fdt_addr_r} ${fdt_file} #load the fdt file into RAM
fatload mmc 0:1 ${loadaddr} ${boot_file} #load the Image.gz file 
unzip ${loadaddr} ${kernel_addr_r} #unzip the Image.gz file into RAM since booti can't do Image.gz
setenv boot_file Image #change back just in case
saveenv
booti ${kernel_addr_r} ${ramdisk_addr_r} ${fdt_addr_r} 

However, I get:

Apalis iMX8 # booti ${kernel_addr_r} ${ramdisk_addr_r} ${fdt_addr_r}
## Loading init Ramdisk from Legacy Image at 8a000000 ...
   Image Name:   Initial Ram Disk
   Image Type:   ARM Linux RAMDisk Image (gzip compressed)
   Data Size:    2004343 Bytes = 1.9 MiB
   Load Address: 00000000
   Entry Point:  00000000
   Verifying Checksum ... OK
## Flattened Device Tree blob at 83000000
   Booting using the fdt blob at 0x83000000
   Loading Ramdisk to fd466000, end fd64f577 ... OK
ERROR: Failed to allocate 0x2bb97 bytes below 0xffe00000.
device tree - allocation error
FDT creation failed! hanging...### ERROR ### Please RESET the board ###

Did I run out of RAM?

Loading Ramdisk to fd466000, end fd64f577 ... OK

which in decimal is (0xFD466000) 4,249,247,744 to (0xFD64F577) 4,251,252,087.
And 4,251,252,087 - 4,249,247,744 = 2,004,343 Bytes. This makes sense since U-Boot outputted

2004407 bytes read in 127 ms (15.1 MiB/s)

After the "load usb 0:1 ${ramdisk_addr_r} initramfs.img " command.

Now 0x2BB97 is 179,095 Bytes, and it says “ERROR: Failed to allocate 0x2bb97 bytes below 0xffe00000” where 0xFFE00000 is 4,292,870,144 Bytes.

I wonder if the bootm_size and bootm_low parameters could be modified to solve this.