AnsweredAssumed Answered

Cannot load Kernel Image due to Image being larger than 8MB

Question asked by Alvin Huang on Apr 29, 2019
Latest reply on May 1, 2019 by Alvin Huang

Hello all, I'm running into this error during start up:

"Loading Kernel Image ... Image too large: increase CONFIG_SYS_BOOTM_LEN"


I’m currently trying to port a demo on to the iMX6 SL board using Integrity 11.4.4 RTOS. I’ve use a example base tutorial as a starting point(Vivante\vdk\es20\tutorial3) and it runs on the Target fine when built. However, after adding all of the necessary files into the project from the port, everything built successfully as well, but the uimage has grown to about 8.3 MB in size and I’m not able to start it up due to the 8MB size restriction. Here’s the error log:


            switch to partitions #0, OK

            mmc1 is current device

            reading / MyDemo.uimage

            8679912 bytes read in 575 ms (14.4 MiB/s)

            reading /imx6q-sabrelite.dtb

            38203 bytes read in 21 ms (1.7 MiB/s)

            ## Booting kernel from Legacy Image at 20000000 ...

               Image Name:

               Image Type:   ARM Linux Kernel Image (uncompressed)

               Data Size:    8679848 Bytes = 8.3 MiB

               Load Address: 18000000

               Entry Point:  18000000

               Verifying Checksum ... OK

            ## Flattened Device Tree blob at 30000000

               Booting using the fdt blob at 0x30000000

               Loading Kernel Image ... Image too large: increase CONFIG_SYS_BOOTM_LEN

            Must RESET board to recover

            resetting ...


I’ve tried to change the CONFIG_SYS_BOOTM_LEN to a larger size and reset, but it didn’t work because it’s not an environment variable I can edit, it only ends up creating a copy. Log:


            => print





            bootargs=device=0 ether=${ethaddr} ipaddr= netmask= gateway= nameserver= hostname=sabreauto

            bootcmd=mmc dev 1; fatload mmc 1:0 20000000 / MyDemo.uimage; fatload mmc 1:0 30000000 /imx6q-sabrelite.dtb; bootm 20000000 - 30000000




I’ve also tried to compress the uimage and it yielded no results due to the files being compressed already when built using the .elf file from Integrity instructions. Log:


            glsbuild@glsbuild-VirtualBox:~/Desktop/BuildFolder$ mkimage -A arm -O linux -C gzip -a 18000000 -d MyDemo.elf MyDemo.uimage

            Image Name:  

            Created:      Wed Apr 24 16:26:01 2019

            Image Type:   ARM Linux Kernel Image (gzip compressed)

            Data Size:    8628608 Bytes = 8426.38 kB = 8.23 MB

            Load Address: 18000000

            Entry Point:  18000000



What are my options from this point on? Do I have the ability to adjust/increase the CONFIG_SYS_BOOTM_LEN size at all? Is this the case where I need to somehow separate the kernel from the actual project into different partitions to get around the kernel size limitations?(If so, can someone point me to some example/documentation on how to do it, since all of the Greenhills samples that I can see only uses one partition.)


If there's a chance that an upgrade to the Uboot will resolve this, here’s the log for that if it’s helpful:

            => ver

            U-Boot 2015.07-15178-g73588dc-dirty (Sep 12 2016 - 14:20:21 -0400)

            arm-linux-gnueabihf-gcc (Ubuntu/Linaro 4.8.4-2ubuntu1~14.04.1) 4.8.4

            GNU ld (GNU Binutils for Ubuntu) 2.24


Thanks in advance for any help!