[FE training-materials-updates] U-Boot lab: reduce the u-boot.bin size

Michael Opdenacker michael.opdenacker at free-electrons.com
Thu Nov 2 12:47:27 CET 2017

Repository : git://git.free-electrons.com/training-materials.git
On branch  : master
Link       : http://git.free-electrons.com/training-materials/commit/?id=2cdd6e904b057aae4a90e3a11d809f7f35ee343e


commit 2cdd6e904b057aae4a90e3a11d809f7f35ee343e
Author: Michael Opdenacker <michael.opdenacker at free-electrons.com>
Date:   Tue Oct 31 11:06:50 2017 +0100

    U-Boot lab: reduce the u-boot.bin size
    - This allows to use the latest U-Boot without
      having to change the default offset for U-Boot
      (in at91bootstrap) or to change the offset for
      U-Boot's environment storage.
    Signed-off-by: Michael Opdenacker <michael.opdenacker at free-electrons.com>


 labs/sysdev-u-boot/sysdev-u-boot.tex | 43 +++++++++++++++++++++++++++++++++---
 1 file changed, 40 insertions(+), 3 deletions(-)

diff --git a/labs/sysdev-u-boot/sysdev-u-boot.tex b/labs/sysdev-u-boot/sysdev-u-boot.tex
index 463976e..867172d 100644
--- a/labs/sysdev-u-boot/sysdev-u-boot.tex
+++ b/labs/sysdev-u-boot/sysdev-u-boot.tex
@@ -90,8 +90,8 @@ If you wish to exit \code{picocom}, press \code{[Ctrl][a]} followed by
 \section{AT91Bootstrap Setup}
 The boot process is done in two steps with the ROM monitor trying to
-execute a first piece of software, called \code{AT91Bootstrap}, from
-its internal SRAM, that will initialize the DRAM, load \code{U-Boot}
+execute a first piece of software, called \em{AT91Bootstrap}, from
+its internal SRAM, that will initialize the DRAM, load \em{U-Boot}
 that will in turn load Linux and execute it.
 As far as bootloaders are concerned, the layout of the NAND flash will
@@ -196,7 +196,6 @@ Download U-Boot:
 wget ftp://ftp.denx.de/pub/u-boot/u-boot-2017.09.tar.bz2
 More recent versions may also work, but we have not tested them.
 Extract the source archive and get an understanding of U-Boot's
@@ -230,6 +229,44 @@ sudo apt-get install device-tree-compiler
+\section{Shrinking U-Boot}
+Look at the size of the \code{u-boot.bin} binary. According to the above
+flash layout, the U-Boot binary is supposed to fit between flash offset
+\code{0x40000} and offset \code{0xc00000}, corresponding to a maximum
+size of \code{524288} bytes. Is \code{u-boot.bin} bigger than this
+The first offset is what AT91Bootstrap expects
+(though it can be changed in AT91Bootstrap's configuration.
+The second one, corresponding to where U-Boot stores its environment
+settings, is board dependent but but apparently cannot be changed
+through \code{make menuconfig}. 
+To avoid recompiling AT91Bootstrap, we propose to compile U-Boot with
+less features, to make its binary small. That's probably something you
+will do too during real-life projects.
+So, in U-Boot sources, run \code{make menuconfig}, look for and disable
+the below options:
+\item \code{ext4} options
+\item \code{nfs} options
+\item \code{EFI} options
+\item \code{imxtract} support
+\item \code{bootelf} command
+\item Regular expression support
+\item \code{dm} support
+\item \code{loadb} support
+\item \code{mii} commands
+Now, recompile U-Boot and check that \code{u-boot.bin} is smaller
+than our maximum size.
+\section{Flashing U-Boot}
 Now, in \code{sam-ba}, in the \code{Send File Name} field, set the path to
 the \code{u-boot.bin} that was just compiled, and set the address to
 \code{0x40000}. Click on the \code{Send File} button.

More information about the training-materials-updates mailing list