uboot/doc/README.ublimage
<<
>>
Prefs
   1---------------------------------------------
   2UBL image Boot Image generation using mkimage
   3---------------------------------------------
   4
   5This document describes how to set up an U-Boot image that can be directly
   6booted by a DaVinci processor via NAND boot mode, using an UBL header,
   7but without need for UBL.
   8
   9For more details see section 11.2 "ARM ROM Boot Modes" of
  10http://focus.ti.com/lit/ug/sprufg5a/sprufg5a.pdf
  11
  12Command syntax:
  13--------------
  14./tools/mkimage -l <u-boot_file>
  15                to list the UBL image file details
  16
  17./tools/mkimage -T ublimage \
  18                -n <board specific configuration file> \
  19                -d <u-boot binary>  <output image file>
  20
  21For example, for the davinci dm365evm board:
  22./tools/mkimage -n ./board/davinci/dm365evm/ublimage.cfg \
  23                -T ublimage \
  24                -d u-boot-nand.bin u-boot.ubl
  25
  26You can generate the image directly when you compile u-boot with:
  27
  28$ make u-boot.ubl
  29
  30The output image can be flashed into the NAND.
  31
  32Please check the DaVinci documentation for further details.
  33
  34Board specific configuration file specifications:
  35-------------------------------------------------
  361. This file must present in the $(BOARDDIR) and the name should be
  37        ublimage.cfg (since this is used in Makefile).
  382. This file can have empty lines and lines starting with "#" as first
  39        character to put comments.
  403. This file can have configuration command lines as mentioned below,
  41        any other information in this file is treated as invalid.
  42
  43Configuration command line syntax:
  44---------------------------------
  451. Each command line must have two strings, first one command or address
  46        and second one data string
  472. Following are the valid command strings and associated data strings:-
  48        Command string          data string
  49        --------------          -----------
  50        MODE                    UBL special mode, on of:
  51                                safe
  52                                Example:
  53                                MODE    safe
  54
  55        ENTRY                   Entry point address for the user
  56                                bootloader (absolute address) = TEXT_BASE
  57                                nand_spl loader.
  58                                Example:
  59                                ENTRY   0x00000020
  60
  61        PAGES                   Number of pages (size of user bootloader
  62                                in number of pages)
  63                                Example:
  64                                PAGES   27
  65
  66        START_BLOCK             Block number where user bootloader is present
  67                                Example:
  68                                START_BLOCK     5
  69
  70        START_PAGE              Page number where user bootloader is present
  71                                (for RBL always 0)
  72                                Example:
  73                                START_PAGE      0
  74
  75------------------------------------------------
  76
  77Structure of the u-boot.ubl binary:
  78
  79compile steps:
  80
  811) nand_spl code compile, with pad_to = (TEXT_BASE +
  82   (CONFIG_SYS_NROF_PAGES_NAND_SPL * pagesize))
  83   Example: cam_enc_4xx pad_to = 0x20 + (6 * 0x800) = 0x3020 = 12320
  84   -> u-boot-spl-16k.bin
  85
  86   !! TEXT_BASE = 0x20, as the RBL starts at 0x20
  87
  882) compile u-boot.bin ("normal" u-boot)
  89   -> u-boot.bin
  90
  913) create u-boot-nand.bin = u-boot-spl-16k.bin + u-boot.bin
  92
  934) create u-boot.ubl, size = 1 page size NAND
  94   create UBL header and paste it before u-boot.bin
  95
  96This steps are done automagically if you do a "make all"
  97
  98-> You get an u-boot.ubl binary, which you can flash
  99   into your NAND.
 100
 101Structure of this binary (Example for the cam_enc_4xx board with a NAND
 102page size = 0x800):
 103
 104offset :    0x00000 | 0x800       | 0x3800
 105content:    UBL     | nand_spl    | u-boot code
 106            Header  | code        |
 107
 108The NAND layout looks for example like this:
 109
 110(Example for the cam_enc_4xx board with a NAND page size = 0x800, block
 111size = 0x20000 and CONFIG_SYS_NROF_UBL_HEADER 5):
 112
 113offset :    0x80000 | 0xa0000     | 0xa3000
 114content:    UBL     | nand_spl    | u-boot code
 115            Header  | code        |
 116            ^         ^
 117            ^         0xa0000 = CONFIG_SYS_NROF_UBL_HEADER * 0x20000
 118            ^
 119            0x80000 = Block 4 * 0x20000
 120
 121If the cpu starts in NAND boot mode, it checks the UBL descriptor
 122starting with block 1 (page 0).  When a valid UBL signature is found,
 123the corresponding block number (from 1 to 24) is written to the last 32
 124bits of ARM internal memory (0x7ffc-0x8000).  This feature is provided
 125as a basic debug mechanism.  If not found, it continues with block 2
 126... last possible block is 24
 127
 128If a valid UBL descriptor is found, the UBL descriptor is read and
 129processed.  The descriptor gives the information required for loading
 130and control transfer to the nand_spl code.  The nand_spl code is then
 131read and processed.
 132
 133Once the user-specified start-up conditions are set, the RBL copies the
 134nand_spl into ARM internal RAM, starting at address 0x0000: 0020.
 135                                                            ^^^^
 136
 137The nand_spl code itself now does necessary intializations, and at least,
 138copies the u-boot code from NAND into RAM, and jumps to it ...
 139
 140------------------------------------------------
 141Author: Heiko Schocher <hs@denx.de>
 142