FreeCalypso > hg > freecalypso-sw
annotate gsm-fw/lldbg/README @ 992:a7b0b426f9ca
target-utils: boot ROM UART autodetection revamped
The new implementation should work with both the familiar Calypso C035
boot ROM version found in our regular targets as well as the older
Calypso F741979B version found on the vintage D-Sample board.
author | Mychaela Falconia <falcon@ivan.Harhan.ORG> |
---|---|
date | Wed, 30 Dec 2015 21:28:41 +0000 |
parents | f5affe83ba2d |
children |
rev | line source |
---|---|
865
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
1 The hack implemented in this directory is a poor girl's substitute for JTAG, |
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
2 concocted for the purpose of debugging hard crashes in the firmware. The |
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
3 intended usage is that the developer seeking to troubleshoot perplexing |
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
4 misbehavior in the firmware inserts a call to lldbg_entry() as a form of |
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
5 breakpoint at the earliest place in the main fw where it is seen that something |
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
6 has gone astray, and when the thread of code execution hits this lldbg_entry() |
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
7 function, the regular Nucleus environment gets completely frozen. Lldbg entry |
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
8 code saves all registers and the return address (LR) on whatever stack it is |
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
9 was called on, then disables all interrupts and switches to its own stack which |
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
10 is not used by any other part of the fw. |
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
11 |
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
12 This lldbg code is linked together with the main fw when feature lldbg is |
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
13 enabled in build.conf, but it stands as its own separate body. All functions |
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
14 and variables within lldbg are prefixed with lldbg_ to avoid any clashes, and |
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
15 once this lldbg code gains control, it does everything on its own without making |
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
16 use of *any* part of the regular fw. The code that forms lldbg is based on |
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
17 FreeCalypso target-utils (loadagent) and is fully independent of the regular fw. |
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
18 |
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
19 Lldbg uses its own UART input and output code as well: the entry code waits for |
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
20 any previous output (presumably RVTMUX) to go out, then sends out an STX-wrapped |
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
21 message to make the lldbg entry visible in rvtdump/rvinterf, preceded by 3 STX |
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
22 characters to terminate any RVTMUX packet in progress. From this point onward |
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
23 all further communication is done in an ASCII terminal fashion: upon seeing the |
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
24 lldbg entry message, the user needs to kill rvtdump/rvinterf and switch to |
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
25 fc-serterm. All lldbg code runs with interrupts disabled, thus UART input and |
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
26 output are polled. |
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
27 |
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
28 Once in lldbg mode, the user (developer) can execute various memory dump |
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
29 commands to see the frozen state of the fw upon lldbg entry, and hopefully |
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
30 figure out what went wrong earlier. |