1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
|
DENX M28EVK
===========
This document describes the DENX M28/M28EVK U-Boot port. This document mostly
covers topics related to making the module/board bootable.
Terminology
-----------
The dollar symbol ($) introduces a snipped of shell code. This shall be typed
into the unix command prompt in U-Boot source code root directory.
The (=>) introduces a snipped of code that should by typed into U-Boot command
prompt.
Contents
--------
0) Files of the M28/M28EVK port
1) Prerequisites
2) Compiling U-Boot for M28
3) Installation of U-Boot for M28EVK to SD card
4) Installation of U-Boot for M28 to NAND flash
0) Files of the M28/M28EVK port
-------------------------------
arch/arm/cpu/arm926ejs/mx28/ - The CPU support code for the Freescale i.MX28
arch/arm/include/asm/arch-mx28/ - Header files for the Freescale i.MX28
board/denx/m28evk/ - M28EVK board specific files
include/configs/m28evk.h - M28EVK configuration file
1) Prerequisites
----------------
To make the M28 module or the M28 module or M28EVK board bootable, some tools
are necessary. The first one is the "elftosb" tool distributed by Freescale
Semiconductor. The other tool is the "mxsboot" tool found in U-Boot source tree.
Firstly, obtain the elftosb archive from the following location:
http://foss.doredevelopment.dk/mirrors/imx/elftosb-10.12.01.tar.gz
We use a $VER variable here to denote the current version. At the time of
writing of this document, that is "10.12.01". To obtain the file from command
line, use:
$ VER="10.12.01"
$ wget http://foss.doredevelopment.dk/mirrors/imx/elftosb-${VER}.tar.gz
Extract the file:
$ tar xzf elftosb-${VER}.tar.gz
Compile the file. We need to manually tell the linker to use also libm:
$ cd elftosb-${VER}/
$ make LIBS="-lstdc++ -lm" elftosb
Optionally, remove debugging symbols from elftosb:
$ strip bld/linux/elftosb
Finally, install the "elftosb" binary. The "install" target is missing, so just
copy the binary by hand:
$ sudo cp bld/linux/elftosb /usr/local/bin/
Make sure the "elftosb" binary can be found in your $PATH, in this case this
means "/usr/local/bin/" has to be in your $PATH.
2) Compiling U-Boot for M28
---------------------------
Compiling the U-Boot for M28 is straightforward and done as compiling U-Boot
for any other ARM device. For cross-compiler setup, please refer to ELDK5.0
documentation. First, clean up the source code:
$ make mrproper
Next, configure U-Boot for M28EVK:
$ make m28evk_config
Lastly, compile U-Boot and prepare a "BootStream". The "BootStream" is a special
type of file, which the i.MX28 CPU can boot. This is handled by the following
command:
$ make u-boot.sb
HINT: To speed-up the build process, you can add -j<N>, where N is number of
compiler instances that'll run in parallel.
The code produces "u-boot.sb" file. This file needs to be augmented with a
proper header to allow successful boot from SD or NAND. Adding the header is
discussed in the following chapters.
3) Installation of U-Boot for M28EVK to SD card
-----------------------------------------------
To boot an M28 from SD, set the boot mode DIP switches according to i.MX28
manual chapter 12.2.1 (Table 12-2), PORT=SSP0, SD/MMC master on SSP0, 3.3V.
An SD card the i.MX28 CPU can use to boot U-Boot must contain a DOS partition
table, which in turn carries a partition of special type and which contains a
special header. The rest of partitions in the DOS partition table can be used
by the user.
To prepare such partition, use your favourite partitioning tool. The partition
must have the following parameters:
* Start sector .......... sector 2048
* Partition size ........ at least 1024 kb
* Partition type ........ 0x53 (sometimes "OnTrack DM6 Aux3")
For example in Linux fdisk, the sequence for a clear card is the following:
* o ..................... create a clear partition table
* n ..................... create new partition
* p ............. primary partition
* 1 ............. first partition
* 2048 .......... first sector is 2048
* +1M ........... make the partition 1Mb big
* t 1 ................... change first partition ID
* 53 ............ change the ID to 0x53 (OnTrack DM6 Aux3)
* <create other partitions>
* w ..................... write partition table to disk
The partition layout is ready, next the special partition must be filled with
proper contents. The contents is generated by running the following command (see
chapter 2)):
$ ./tools/mxsboot sd u-boot.sb u-boot.sd
The resulting file, "u-boot.sd", shall then be written to the partition. In this
case, we assume the first partition of the SD card is /dev/mmcblk0p1:
$ dd if=u-boot.sd of=/dev/mmcblk0p1
Last step is to insert the card into M28EVK and boot.
NOTE: If the user needs to adjust the start sector, the "mxsboot" tool contains
a "-p" switch for that purpose. The "-p" switch takes the sector number as
an argument.
4) Installation of U-Boot for M28 to NAND flash
-----------------------------------------------
To boot an M28 from NAND, set the boot mode DIP switches according to i.MX28
manual chapter 12.2.1 (Table 12-2), PORT=GPMI, NAND 1.8 V.
There are two possibilities when preparing an image writable to NAND flash.
I) The NAND wasn't written at all yet or the BCB is broken
----------------------------------------------------------
In this case, both BCB (FCB and DBBT) and firmware needs to be
written to NAND. To generate NAND image containing all these,
there is a tool called "mxsboot" in the "tools/" directory. The tool
is invoked on "u-boot.sb" file from chapter 2):
$ ./tools/mxsboot nand u-boot.sb u-boot.nand
NOTE: The above invokation works for NAND flash with geometry of
2048b per page, 64b OOB data, 128kb erase size. If your chip
has a different geometry, please use:
-w <size> change page size (default 2048 b)
-o <size> change oob size (default 64 b)
-e <size> change erase size (default 131072 b)
The geometry information can be obtained from running U-Boot
on M28 by issuing the "nand info" command.
The resulting file, "u-boot.nand" can be written directly to NAND
from the U-Boot prompt. To simplify the process, the U-Boot default
environment contains script "update_nand_full" to update the system.
This script expects a working TFTP server containing the file
"u-boot.nand" in it's root directory. This can be changed by
adjusting the "update_nand_full_filename" varible.
To update the system, run the following in U-Boot prompt:
=> run update_nand_full
In case you would only need to update the bootloader in future,
see II) below.
II) The NAND was already written with a good BCB
------------------------------------------------
This part applies after the part I) above was done at least once.
If part I) above was done correctly already, there is no need to
write the FCB and DBBT parts of NAND again. It's possible to upgrade
only the bootloader image.
To simplify the process of firmware update, the U-Boot default
environment contains script "update_nand_firmware" to update only
the firmware, without rewriting FCB and DBBT.
This script expects a working TFTP server containing the file
"u-boot.sb" in it's root directory. This can be changed by
adjusting the "update_nand_firmware_filename" varible.
To update the system, run the following in U-Boot prompt:
=> run update_nand_firmware
III) Special settings for the update scripts
--------------------------------------------
There is a slight possibility of the user wanting to adjust the
STRIDE and COUNT options of the NAND boot. For description of these,
see i.MX28 manual section 12.12.1.2 and 12.12.1.3.
The update scripts take this possibility into account. In case the
user changes STRIDE by blowing fuses, the user also has to change
"update_nand_stride" variable. In case the user changes COUNT by
blowing fuses, the user also has to change "update_nand_count"
variable for the update scripts to work correctly.
In case the user needs to boot a firmware image bigger than 1Mb, the
user has to adjust the "update_nand_firmware_maxsz" variable for the
update scripts to work properly.
|