Memory Management

Note

This information is outdated and needs to be updated.

U-Boot runs in system state and uses physical addresses, i.e. the MMU is not used either for address mapping nor for memory protection.

The available memory is mapped to fixed addresses using the memory-controller. In this process, a contiguous block is formed for each memory type (Flash, SDRAM, SRAM), even when it consists of several physical-memory banks.

U-Boot is installed in XIP flash memory, or may be loaded into a lower region of RAM by a secondary program loader (SPL). After booting and sizing and initialising DRAM, the code relocates itself to the upper end of DRAM. Immediately below the U-Boot code some memory is reserved for use by malloc() [see CONFIG_SYS_MALLOC_LEN configuration setting]. Below that, a structure with global Board-Info data is placed, followed by the stack (growing downward).

Additionally, some exception handler code may be copied to the low 8 kB of DRAM (0x00000000 … 0x00001fff).

So a typical memory configuration with 16 MB of DRAM could look like this:

0x0000 0000     Exception Vector code
      :
0x0000 1fff
0x0000 2000     Free for Application Use
      :
      :

      :
      :
0x00fb ff20     Monitor Stack (Growing downward)
0x00fb ffac     Board Info Data and permanent copy of global data
0x00fc 0000     Malloc Arena
      :
0x00fd ffff
0x00fe 0000     RAM Copy of Monitor Code
...             eventually: LCD or video framebuffer
...             eventually: pRAM (Protected RAM - unchanged by reset)
0x00ff ffff     [End of RAM]