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