Q&A: What is max size of uImage?

Document created by Yixing Kong Employee on Oct 13, 2013
Version 1Show Document
  • View in full screen mode

Question:

In a single uImage to contain the compressed kernel and rootfs, if the uImage is greater than 16MB, the system will not boot and reports errors. Is there a size limitation on uImage?  If so, is there a work around?

 

Answer:

uImage should only contains kernel compressed. rootfs should be read through a linux partition after the kernel boots up.

Regarding the uImage's size, there is no limitation. In the other hand, a single uImage with kernel and filesystem is needed; in other words, kernel (alias uImage) needs a filesystem to work, and these are two independent systems in that sense. If u-boot, kernel and filesystem are in a single device (SD Card), the filesystem must be mounted in the first partition (SD, eMMC, etc) starting somewhere > 16M/512 sectors.

 

But in cases where:

* A fast boot is needed with  very small rootfs

* As a intermediate (temporal) rootfs  before switching  to the real rootfs. The usage (actually used when flashing with the MFG tool) of this intermediate system is to load heavy modules, keeping the uImage small.

 

This mechanism is called initramfs and the uImage will contain the kernel and the this mini rootfs compressed as cpio archive.

But there appears to be a 16MB limitation. See here:  http://www.isysop.com/unpacking-and-repacking-u-boot-uimage-files/

 

It seems to be related to alignment suggesting that 24-bit addressing is used instead of 32-bit.  I did notice Thumb mode is used, which seems odd to me.

Attachments

    Outcomes