summaryrefslogtreecommitdiff
path: root/package/etrax-tools/src/e100boot/doc/e100boot.1
blob: 116b9e577f6f009626b3a54f230bdcd77b7cb9ad (plain)
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
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32
.\"
.\" Standard preamble:
.\" ========================================================================
.de Sh \" Subsection heading
.br
.if t .Sp
.ne 5
.PP
\fB\\$1\fR
.PP
..
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
.de Ve \" End verbatim text
.ft R
.fi
..
.\" Set up some character translations and predefined strings.  \*(-- will
.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
.\" double quote, and \*(R" will give a right double quote.  \*(C+ will
.\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
.\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
.\" nothing in troff, for use with C<>.
.tr \(*W-
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
.    ds -- \(*W-
.    ds PI pi
.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
.    ds L" ""
.    ds R" ""
.    ds C` ""
.    ds C' ""
'br\}
.el\{\
.    ds -- \|\(em\|
.    ds PI \(*p
.    ds L" ``
.    ds R" ''
'br\}
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
.\" entries marked with X<> in POD.  Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.if \nF \{\
.    de IX
.    tm Index:\\$1\t\\n%\t"\\$2"
..
.    nr % 0
.    rr F
.\}
.\"
.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.hy 0
.if n .na
.\"
.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
.    \" fudge factors for nroff and troff
.if n \{\
.    ds #H 0
.    ds #V .8m
.    ds #F .3m
.    ds #[ \f1
.    ds #] \fP
.\}
.if t \{\
.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
.    ds #V .6m
.    ds #F 0
.    ds #[ \&
.    ds #] \&
.\}
.    \" simple accents for nroff and troff
.if n \{\
.    ds ' \&
.    ds ` \&
.    ds ^ \&
.    ds , \&
.    ds ~ ~
.    ds /
.\}
.if t \{\
.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.\}
.    \" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
.    \" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
.    \" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
.    ds : e
.    ds 8 ss
.    ds o a
.    ds d- d\h'-1'\(ga
.    ds D- D\h'-1'\(hy
.    ds th \o'bp'
.    ds Th \o'LP'
.    ds ae ae
.    ds Ae AE
.\}
.rm #[ #] #H #V #F C
.\" ========================================================================
.\"
.IX Title "E100BOOT 1"
.TH E100BOOT 1 "2003-12-16" "perl v5.8.8" "User Contributed Perl Documentation"
.SH "NAME"
e100boot \- Network and serial port bootloader for the ETRAX100 CPU.
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
\&\fBe100boot\fR [\fB\-\-device\fR \fIdevicename\fR]
[\fB\-\-file\fR \fIfilename\fR|\- \fIaddr\fR [\fIsize\fR]]
[\fB\-\-flash\fR \fIram-source\fR \fIflash-offset\fR \fIsize\fR] [\fB\-\-pause\fR \fIiter\fR]
[\fB\-\-memtest\fR \fIaddr\fR \fIaddr\fR] [\fB\-\-memclear\fR \fIaddr\fR \fIaddr\fR]
[\fB\-\-memdump\fR \fIaddr\fR \fIaddr\fR] [\fB\-\-setreg\fR \fIaddr\fR|\fIregname\fR \fIval\fR]
[\fB\-\-getreg\fR \fIaddr\fR|\fIregname\fR] [\fB\-\-verify\fR \fIaddr\fR \fIval\fR]
[\fB\-\-label\fR \fIlabel\fR] [\fB\-\-loop\fR \fIaddr\fR \fIlabel\fR] [\fB\-\-5400\fR] [\fB\-\-5600\fR]
[\fB\-\-testcard\fR] [\fB\-\-devboard\fR] [\fB\-\-testcardlx\fR] [\fB\-\-network\fR] [\fB\-\-serial\fR]
[\fB\-\-baudrate\fR \fIbaudrate\fR] [\fB\-\-bootfile\fR \fIfile\fR] [\fB\-\-jump\fR \fIaddr\fR]
[\fB\-\-tofiles\fR] [\fB\-\-cmdsonly\fR] [\fB\-\-images\fR] [\fB\-\-noleds\fR] [\fB\-\-help\fR]
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
This boot loader facilitates loading of files over the network or a
serial port to an \s-1ETRAX100\s0. It can also be used for fairly extensive
hardware debugging as you can read and write to any memory addresses,
including the \s-1ETRAX100\s0 registers. You can also perform memory checks
and dumps and copy data to flash memories.
.PP
The first packet (or the first 784 bytes in the case of serial boot)
sent to Etrax100 is loaded into the cache. The code in this packet is
executed and loads the rest of the boot loader into the cache. The
cache is the only thing we can be sure of exists on all \s-1ETRAX100\s0
products, so the boot loader is limited to the size of the cache,
8KB. If further boot loading code is needed you have to set up
external memory and load another boot loader into it, but this is
rarely needed.
.PP
Two programs are involved in this boot loading, one is the program on
your workstation that sends the packets to \s-1ETRAX100\s0, this is called
the server boot loader or \s-1SBL\s0. The other program is the one in
\&\s-1ETRAX100\s0 that receives packets from the \s-1SBL\s0 and acts upon the data
therein, this is called the client boot loader or \s-1CBL\s0.
.PP
We don't want to edit and recompile the \s-1CBL\s0 each time we want to load
level two to different parts of memory, like we do on different
products. We also want to change things like the setup of external
memory before we load data into it. To make the boot loading as
flexible as possible and separate the \s-1CBL\s0 from level two we send a
configuration packet to it. After this packet we load other files, if
we want to.
.PP
The configuration packet can contain information to the \s-1CBL\s0 which lets
you: initialize external memory, read and write to all \s-1ETRAX100\s0
registers, read and write to any part of memory, load as many other
files as you like to any part of memory you like, etc. The
configuration packet is generated on the fly by the \s-1SBL\s0.
.PP
Since the \s-1CBL\s0 is unaware of which product it will be loaded on, it
doesn't do product specific initialization like setting up the
memory. This must be done with the configuration packet.
.Sh "Debugging printout"
.IX Subsection "Debugging printout"
When doing network boot the debugging printout from the \s-1CBL\s0 in \s-1ETRAX\s0
is transmitted back over the network and printed by e100boot. When
doing serial boot that interface will be used. So in either case you
will not need any other software or hardware to receive the debugging
printout.
.Sh "Creating binaries"
.IX Subsection "Creating binaries"
The files containing code to be loaded on the \s-1ETRAX100\s0 must be
stripped using the standard \s-1GCC\s0 binutils.
.Sh "How it works, things you don't want to know."
.IX Subsection "How it works, things you don't want to know."
ack, timeout bla, bla... \s-1RTFS\s0.
.Sh "Compilation and code"
.IX Subsection "Compilation and code"
Noteworthy is that two separate \s-1ETRAX100\s0 binaries are created, one for
network boot and one for serial boot. They actually contain exactly
the same code, but linked in different order. This is because the code
to load the rest of the bootloader over a specific interface must be
contained in the first data sent to the \s-1ETRAX100\s0 and it is too
difficult to cram the code for both interfaces in the beginning of the
same binary. Hence two files.
.PP
Other stuff you don't want to know is that the cache is mapped from
0x380000f0 to 0x380020f0. Code starts at the first address followed by
data up to the symbol \fIEbss\fR. At the other end is the buffer for boot
commands (addresses defined by \fI\s-1IO_BUF_START\s0\fR and \fI\s-1IO_BUF_END\s0\fR below
which the stack lies and hopefully the stack and \fIEbss\fR will never
meet...
.PP
The serial data is loaded from 0x380000f0 to 0x380003ff before
execution starts.
.SH "OPTIONS"
.IX Header "OPTIONS"
The options are done in the order specified on the command line, so
you probably want to do any memory setup before loading a file to the
memory, and you probably do not want to perform a memory test after
you have loaded a file to that memory.
.PP
All addresses and sizes must be in hex with optional '0x' prefix, or a
\&\s-1ETRAX100\s0 register name. Since the \fB\-\-setreg\fR and \fB\-\-getreg\fR options
only can be performed on dword aligned dwords only the registers that
conform to this can be named.
.PP
Note also that all addresses must be in uncached memory (bit 31 set),
as the bootloader lies in the cache. If you access any uncached
address during boot, the bootloader will be destroyed without warning.
.PP
It is also possible to specify an address as \fI+address\fR, in which
case it is considered to be relative to \fI\s-1IO_BUF_START\s0\fR. This is
especially useful in combination with the \fB\-\-loop\fR option below.
.IP "\fB\-\-baudrate\fR \fIbaudrate\fR" 4
.IX Item "--baudrate baudrate"
Set baudrate for files loaded after the boot loader.
.IP "\fB\-\-bootfile\fR \fIfilename\fR" 4
.IX Item "--bootfile filename"
Which boot image to send to \s-1ETRAX\s0 instead of the default ones.
.IP "\fB\-\-cmdsonly\fR" 4
.IX Item "--cmdsonly"
Write the commands to file e100boot.cmds.
.IP "\fB\-\-devboard\fR" 4
.IX Item "--devboard"
Sets registers for the developer board.
.IP "\fB\-\-device\fR \fIdevicename\fR" 4
.IX Item "--device devicename"
Which device to send packets on. For network boot the default is
eth0. For serial boot it is ttyS0.
.IP "\fB\-\-file\fR \fIfilename\fR|\- \fIaddress\fR [\fIsize\fR]" 4
.IX Item "--file filename|- address [size]"
The file to load and the address to load it to. If file is loaded on
stdin, specify filename '\-' followed by a size. Size need only be
given in this case. You can load as many files as you want, each
specified with a \fB\-\-file\fR.
.IP "\fB\-\-flash\fR \fIram-source flash-offset size\fR" 4
.IX Item "--flash ram-source flash-offset size"
Copies the specified \s-1RAM\s0 area to the flash.
.IP "\fB\-\-getreg\fR \fIaddress\fR|\fIregname\fR" 4
.IX Item "--getreg address|regname"
Print value of memory location. Must be uncached address.
.IP "\fB\-\-help\fR" 4
.IX Item "--help"
Print the help information.
.IP "\fB\-\-images\fR" 4
.IX Item "--images"
Print information about the internal boot images, then exit.
.IP "\fB\-\-jump\fR \fIaddress\fR" 4
.IX Item "--jump address"
Jump to specified address.
.IP "\fB\-\-label\fR \fIlabel\fR" 4
.IX Item "--label label"
Define a label to be used as target by the \fB\-\-loop\fR command. This
command is only used by the \s-1SBL\s0 to calculate the address for the
\&\fB\-\-loop\fR and does not take up any space in the configuration packet.
.IP "\fB\-\-loop\fR \fIcheck-address label\fR" 4
.IX Item "--loop check-address label"
If the contents of check-address is nonzero it is decremented and the
command parser continues parsing at the label.
.Sp
If no external memory is initialized yet it can be convenient to use
an address in the area occupied by the configuration packet. Run
e100boot with \fB\-\-help\fR to see which addresses the commands are stored
at. The size of the commands are four bytes for each command plus four
bytes per argument to the command.
.IP "\fB\-\-memclear\fR \fIstart-address end-address\fR" 4
.IX Item "--memclear start-address end-address"
Clears the specified memory area.
.IP "\fB\-\-memdump\fR \fIstart-address end-address\fR" 4
.IX Item "--memdump start-address end-address"
Prints the contents of the specified memory area.
.IP "\fB\-\-memtest\fR \fIstart-address end-address\fR" 4
.IX Item "--memtest start-address end-address"
Does a fairly extensive test of the specified memory area. Not only
catches defect memories but also catches things like wrong memory
setups where memory addresses are mirrored onto each other.
.IP "\fB\-\-network\fR" 4
.IX Item "--network"
Perform a network boot.
.IP "\fB\-\-noleds\fR" 4
.IX Item "--noleds"
When using the internal images use a version that does not toggle
general port \s-1PA\s0 or \s-1PB\s0 in \s-1ETRAX\s0 during the boot procedure.
.IP "\fB\-\-pause\fR \fIiterations\fR" 4
.IX Item "--pause iterations"
How many \fIiterations\fR to do of an empty loop.
.IP "\fB\-\-serial\fR" 4
.IX Item "--serial"
Do a serial boot.
.IP "\fB\-\-setreg\fR \fIaddress\fR|\fIregname\fR \fIvalue\fR" 4
.IX Item "--setreg address|regname value"
Load dword to dword aligned memory location.
.IP "\fB\-\-testcard\fR" 4
.IX Item "--testcard"
Configures the memories for the \s-1ETRAX\s0 100 testcard.
.IP "\fB\-\-testcardlx\fR" 4
.IX Item "--testcardlx"
Configures the memories for the \s-1ETRAX100\s0 \s-1LX\s0 testcard.
.IP "\fB\-\-tofiles\fR" 4
.IX Item "--tofiles"
Write packets to files e100boot.seq[0..]. Does not transmit the data.
.IP "\fB\-\-verify\fR \fIaddress value\fR" 4
.IX Item "--verify address value"
Verify that memory contains dword. If not loader will stop. This is to
avoid booting the wrong unit. If you have the units ethernet address
in the flash memory you can check for that.
.IP "\fB\-\-5400\fR" 4
.IX Item "--5400"
Sets R_WAITSTATES, R_DRAM_TIMING and R_DRAM_CONFIG for the 5400
printserver.
.IP "\fB\-\-5600\fR" 4
.IX Item "--5600"
Sets R_WAITSTATES, R_DRAM_TIMING and R_DRAM_CONFIG for the 5600
printserver.
.SH "EXAMPLES"
.IX Header "EXAMPLES"
If you have a stripped binary (file.ima) linked to 0x08000000 that you want
to boot via the network, do this:
.PP
\&\fBe100boot \-\-file file.ima 88000000 \-\-jump 08000000\fR
.PP
Or something like this. Sets waitstates to zero and loads two files,
the first from stdin:
.PP
\&\fBcat file.ima | e100boot \-\-memtest 88000000 8801ffff \-\-memclear
88000000 8801ffff \-\-setreg b0000000 0 \-\-getreg b0000000 \-\-file \-
88000000 a000 \-\-file file2.ima 88010000 \-\-memdump 88000000 880000ff
\&\-\-jump 08000000\fR
.PP
Or this, enables 16 bit parallel port and flashes the led on \s-1PA0:\s0
.PP
\&\fBe100boot \-\-testcardlx \-\-setreg R_PORT_PA_SET 0x00000000 \-\-setreg
R_GEN_CONFIG 0x80000004 \-\-setreg R_PAR0_CONFIG 0x00000200 \-\-setreg
R_PORT_G_DATA 0x00000000 \-\-pause 0x02000000 \-\-setreg R_PORT_G_DATA
0xffffffff \-\-pause 0x02000000 \-\-setreg R_PORT_G_DATA 0x00000000 \-\-loop
0x38001e0b 0x38001e60\fR
.PP
Setup the memory, test the \s-1SRAM\s0, print the contents of the first 256
bytes of \s-1SRAM\s0, clear \s-1SRAM\s0, test the \s-1DRAM\s0, print R_DMA_CH0_CMD, load a
file to \s-1SRAM\s0, load another file to \s-1SRAM\s0, load file to \s-1DRAM\s0, jump to
code in \s-1SRAM\s0.
.PP
\&\fBe100boot \-\-setreg b0000000 1000 \-\-setreg b0000008 00006543 \-\-setreg
b000000c 12966060 \-\-memtest 88000000 80000 \-\-memdump 88000000 880000ff
\&\-\-memclear 88000000 80000 \-\-memtest c0000000 400000 \-\-getreg b00001d0
\&\-\-file file1.ima 88000000 \-\-file file2.ima 88010000 \-\-file file3.ima
c0000000 \-\-jump 88000000\fR
.PP
Boot Linux on the testcard.
.PP
\&\fBe100boot \-\-setreg b0000000 1000 \-\-setreg b0000008 6557 \-\-setreg
b000000c 1b988080 \-\-file timage c0000500 \-\-jump 40000500\fR
.PP
Booting over serial port and using labels to flash the leds on port
\&\s-1PA\s0.
.PP
\&\fBe100boot \-\-serial \-\-device /dev/ttyS1 \-\-baudrate 9600 \-\-label first
\&\-\-setreg 0x380020e0 00000001 \-\-setreg R_PORT_PA_SET 0x0000ff00 \-\-pause
0x02000000 \-\-setreg R_PORT_PA_SET 0x0000ffff \-\-pause 0x02000000 \-\-loop
0x380020e0 first\fR
.SH "BUGS"
.IX Header "BUGS"
You're kidding, right? Check \s-1AUTHOR\s0 below. The only thing
would be the hubris of the author, but that I consider a feature. If
you find any other 'features' report them to
technology@axis.com. Don't bother the author directly, he is busy
playing PlayStation2.
.SH "COPYING"
.IX Header "COPYING"
Copyright © 1996\-2002 Axis Communications \s-1AB\s0.
.SH "AUTHOR"
.IX Header "AUTHOR"
Written by Ronny Ranerup.
.SH "SEE ALSO"
.IX Header "SEE ALSO"
The fine source, which you can get at http://developer.axis.com.