uboot/doc/README.mxs
<<
>>
Prefs
   1Booting U-Boot on a MXS processor
   2=================================
   3
   4This document describes the MXS U-Boot port. This document mostly covers topics
   5related to making the module/board bootable.
   6
   7Terminology
   8-----------
   9
  10The term "MXS" refers to a family of Freescale SoCs that is composed by MX23
  11and MX28.
  12
  13The dollar symbol ($) introduces a snipped of shell code. This shall be typed
  14into the unix command prompt in U-Boot source code root directory.
  15
  16The (=>) introduces a snipped of code that should by typed into U-Boot command
  17prompt
  18
  19Contents
  20--------
  21
  221) Prerequisites
  232) Compiling U-Boot for a MXS based board
  243) Installation of U-Boot for a MXS based board to SD card
  254) Installation of U-Boot into NAND flash on a MX28 based board
  265) Installation of U-Boot into SPI NOR flash on a MX28 based board
  27
  281) Prerequisites
  29----------------
  30
  31To make a MXS based board bootable, some tools are necessary. The only
  32mandatory tool is the "mxsboot" tool found in U-Boot source tree. The
  33tool is built automatically when compiling U-Boot for i.MX23 or i.MX28.
  34
  35The production of BootStream image is handled via "mkimage", which is
  36also part of the U-Boot source tree. The "mkimage" requires OpenSSL
  37development libraries to be installed. In case of Debian and derivates,
  38this is installed by running:
  39
  40        $ sudo apt-get install libssl-dev
  41
  42NOTE: The "elftosb" tool distributed by Freescale Semiconductor is no
  43      longer necessary for general use of U-Boot on i.MX23 and i.MX28.
  44      The mkimage supports generation of BootStream images encrypted
  45      with a zero key, which is the vast majority of use-cases. In
  46      case you do need to produce image encrypted with non-zero key
  47      or other special features, please use the "elftosb" tool,
  48      otherwise continue to section 2). The installation procedure of
  49      the "elftosb" is outlined below:
  50
  51Firstly, obtain the elftosb archive from the following location:
  52
  53        ftp://ftp.denx.de/pub/tools/elftosb-10.12.01.tar.gz
  54
  55We use a $VER variable here to denote the current version. At the time of
  56writing of this document, that is "10.12.01". To obtain the file from command
  57line, use:
  58
  59        $ VER="10.12.01"
  60        $ wget ftp://ftp.denx.de/pub/tools/elftosb-${VER}.tar.gz
  61
  62Extract the file:
  63
  64        $ tar xzf elftosb-${VER}.tar.gz
  65
  66Compile the file. We need to manually tell the linker to use also libm:
  67
  68        $ cd elftosb-${VER}/
  69        $ make LIBS="-lstdc++ -lm" elftosb
  70
  71Optionally, remove debugging symbols from elftosb:
  72
  73        $ strip bld/linux/elftosb
  74
  75Finally, install the "elftosb" binary. The "install" target is missing, so just
  76copy the binary by hand:
  77
  78        $ sudo cp bld/linux/elftosb /usr/local/bin/
  79
  80Make sure the "elftosb" binary can be found in your $PATH, in this case this
  81means "/usr/local/bin/" has to be in your $PATH.
  82
  832) Compiling U-Boot for a MXS based board
  84-------------------------------------------
  85
  86Compiling the U-Boot for a MXS board is straightforward and done as compiling
  87U-Boot for any other ARM device. For cross-compiler setup, please refer to
  88ELDK5.0 documentation. First, clean up the source code:
  89
  90        $ make mrproper
  91
  92Next, configure U-Boot for a MXS based board
  93
  94        $ make <mxs_based_board_name>_config
  95
  96Examples:
  97
  981. For building U-Boot for Aries M28EVK board:
  99
 100        $ make m28evk_config
 101
 1022. For building U-Boot for Freescale MX28EVK board:
 103
 104        $ make mx28evk_config
 105
 1063. For building U-Boot for Freescale MX23EVK board:
 107
 108        $ make mx23evk_config
 109
 1104. For building U-Boot for Olimex MX23 Olinuxino board:
 111
 112        $ make mx23_olinuxino_config
 113
 114Lastly, compile U-Boot and prepare a "BootStream". The "BootStream" is a special
 115type of file, which MXS CPUs can boot. This is handled by the following
 116command:
 117
 118        $ make u-boot.sb
 119
 120HINT: To speed-up the build process, you can add -j<N>, where N is number of
 121      compiler instances that'll run in parallel.
 122
 123The code produces "u-boot.sb" file. This file needs to be augmented with a
 124proper header to allow successful boot from SD or NAND. Adding the header is
 125discussed in the following chapters.
 126
 127NOTE: The process that produces u-boot.sb uses the mkimage to generate the
 128      BootStream. The BootStream is encrypted with zero key. In case you need
 129      some special features of the BootStream and plan on using the "elftosb"
 130      tool instead, the invocation to produce a compatible BootStream with the
 131      one produced by mkimage is outlined below. For further details, refer to
 132      the documentation bundled with the "elftosb" package.
 133
 134        $ elftosb -zf imx23 -c arch/arm/cpu/arm926ejs/mxs/u-boot-imx23.bd \
 135                -o u-boot.sb
 136        $ elftosb -zf imx28 -c arch/arm/cpu/arm926ejs/mxs/u-boot-imx28.bd \
 137                -o u-boot.sb
 138
 1393) Installation of U-Boot for a MXS based board to SD card
 140----------------------------------------------------------
 141
 142To boot a MXS based board from SD, set the boot mode DIP switches according to
 143to MX28 manual, section 12.2.1 (Table 12-2) or MX23 manual, section 35.1.2
 144(Table 35-3).
 145
 146The SD card used to boot U-Boot must contain a DOS partition table, which in
 147turn carries a partition of special type and which contains a special header.
 148The rest of partitions in the DOS partition table can be used by the user.
 149
 150To prepare such partition, use your favourite partitioning tool. The partition
 151must have the following parameters:
 152
 153        * Start sector .......... sector 2048
 154        * Partition size ........ at least 1024 kb
 155        * Partition type ........ 0x53 (sometimes "OnTrack DM6 Aux3")
 156
 157For example in Linux fdisk, the sequence for a clear card follows. Be sure to
 158run fdisk with the option "-u=sectors" to set units to sectors:
 159
 160        * o ..................... create a clear partition table
 161        * n ..................... create new partition
 162                * p ............. primary partition
 163                * 1 ............. first partition
 164                * 2048 .......... first sector is 2048
 165                * +1M ........... make the partition 1Mb big
 166        * t 1 ................... change first partition ID
 167                * 53 ............ change the ID to 0x53 (OnTrack DM6 Aux3)
 168        * <create other partitions>
 169        * w ..................... write partition table to disk
 170
 171The partition layout is ready, next the special partition must be filled with
 172proper contents. The contents is generated by running the following command
 173(see chapter 2)):
 174
 175        $ ./tools/mxsboot sd u-boot.sb u-boot.sd
 176
 177The resulting file, "u-boot.sd", shall then be written to the partition. In this
 178case, we assume the first partition of the SD card is /dev/mmcblk0p1:
 179
 180        $ dd if=u-boot.sd of=/dev/mmcblk0p1
 181
 182Last step is to insert the card into the MXS based board and boot.
 183
 184NOTE: If the user needs to adjust the start sector, the "mxsboot" tool contains
 185      a "-p" switch for that purpose. The "-p" switch takes the sector number as
 186      an argument.
 187
 1884) Installation of U-Boot into NAND flash on a MX28 based board
 189---------------------------------------------------------------
 190
 191To boot a MX28 based board from NAND, set the boot mode DIP switches according
 192to MX28 manual section 12.2.1 (Table 12-2), PORT=GPMI, NAND 1.8 V.
 193
 194There are two possibilities when preparing an image writable to NAND flash.
 195
 196        I) The NAND wasn't written at all yet or the BCB is broken
 197        ----------------------------------------------------------
 198           In this case, both BCB (FCB and DBBT) and firmware needs to be
 199           written to NAND. To generate NAND image containing all these,
 200           there is a tool called "mxsboot" in the "tools/" directory. The tool
 201           is invoked on "u-boot.sb" file from chapter 2):
 202
 203                 $ ./tools/mxsboot nand u-boot.sb u-boot.nand
 204
 205           NOTE: The above invokation works for NAND flash with geometry of
 206                 2048b per page, 64b OOB data, 128kb erase size. If your chip
 207                 has a different geometry, please use:
 208
 209                 -w <size>      change page size (default 2048 b)
 210                 -o <size>      change oob size (default 64 b)
 211                 -e <size>      change erase size (default 131072 b)
 212
 213                 The geometry information can be obtained from running U-Boot
 214                 on the MX28 board by issuing the "nand info" command.
 215
 216           The resulting file, "u-boot.nand" can be written directly to NAND
 217           from the U-Boot prompt. To simplify the process, the U-Boot default
 218           environment contains script "update_nand_full" to update the system.
 219
 220           This script expects a working TFTP server containing the file
 221           "u-boot.nand" in it's root directory. This can be changed by
 222           adjusting the "update_nand_full_filename" variable.
 223
 224           To update the system, run the following in U-Boot prompt:
 225
 226                 => run update_nand_full
 227
 228           In case you would only need to update the bootloader in future,
 229           see II) below.
 230
 231        II) The NAND was already written with a good BCB
 232        ------------------------------------------------
 233           This part applies after the part I) above was done at least once.
 234
 235           If part I) above was done correctly already, there is no need to
 236           write the FCB and DBBT parts of NAND again. It's possible to upgrade
 237           only the bootloader image.
 238
 239           To simplify the process of firmware update, the U-Boot default
 240           environment contains script "update_nand_firmware" to update only
 241           the firmware, without rewriting FCB and DBBT.
 242
 243           This script expects a working TFTP server containing the file
 244           "u-boot.sb" in it's root directory. This can be changed by
 245           adjusting the "update_nand_firmware_filename" variable.
 246
 247           To update the system, run the following in U-Boot prompt:
 248
 249                 => run update_nand_firmware
 250
 251        III) Special settings for the update scripts
 252        --------------------------------------------
 253           There is a slight possibility of the user wanting to adjust the
 254           STRIDE and COUNT options of the NAND boot. For description of these,
 255           see MX28 manual section 12.12.1.2 and 12.12.1.3.
 256
 257           The update scripts take this possibility into account. In case the
 258           user changes STRIDE by blowing fuses, the user also has to change
 259           "update_nand_stride" variable. In case the user changes COUNT by
 260           blowing fuses, the user also has to change "update_nand_count"
 261           variable for the update scripts to work correctly.
 262
 263           In case the user needs to boot a firmware image bigger than 1Mb, the
 264           user has to adjust the "update_nand_firmware_maxsz" variable for the
 265           update scripts to work properly.
 266
 2675) Installation of U-Boot into SPI NOR flash on a MX28 based board
 268------------------------------------------------------------------
 269
 270The u-boot.sb file can be directly written to SPI NOR from U-Boot prompt.
 271
 272Load u-boot.sb into RAM, this can be done in several ways and one way is to use
 273tftp:
 274       => tftp u-boot.sb 0x42000000
 275
 276Probe the SPI NOR flash:
 277       => sf probe
 278
 279(SPI NOR should be succesfully detected in this step)
 280
 281Erase the blocks where U-Boot binary will be written to:
 282       => sf erase 0x0 0x80000
 283
 284Write u-boot.sb to SPI NOR:
 285       => sf write 0x42000000 0 0x80000
 286
 287Power off the board and set the boot mode DIP switches to boot from the SPI NOR
 288according to MX28 manual section 12.2.1 (Table 12-2)
 289
 290Last step is to power up the board and U-Boot should start from SPI NOR.
 291