README.mxs 9.8 KB

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