OpenCores
URL https://opencores.org/ocsvn/test_project/test_project/trunk

Subversion Repositories test_project

[/] [test_project/] [trunk/] [linux_sd_driver/] [Documentation/] [sh/] [kgdb.txt] - Blame information for rev 78

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 62 marcus.erl
 
2
This file describes the configuration and behavior of KGDB for the SH
3
kernel. Based on a description from Henry Bell , it
4
has been modified to account for quirks in the current implementation.
5
 
6
Version
7
=======
8
 
9
This version of KGDB was written for 2.4.xx kernels for the SH architecture.
10
Further documentation is available from the linux-sh project website.
11
 
12
 
13
Debugging Setup: Host
14
======================
15
 
16
The two machines will be connected together via a serial line - this
17
should be a null modem cable i.e. with a twist.
18
 
19
On your DEVELOPMENT machine, go to your kernel source directory and
20
build the kernel, enabling KGDB support in the "kernel hacking" section.
21
This includes the KGDB code, and also makes the kernel be compiled with
22
the "-g" option set -- necessary for debugging.
23
 
24
To install this new kernel, use the following installation procedure.
25
 
26
Decide on which tty port you want the machines to communicate, then
27
cable them up back-to-back using the null modem.  On the DEVELOPMENT
28
machine, you may wish to create an initialization file called .gdbinit
29
(in the kernel source directory or in your home directory) to execute
30
commonly-used commands at startup.
31
 
32
A minimal .gdbinit might look like this:
33
 
34
  file vmlinux
35
  set remotebaud 115200
36
  target remote /dev/ttyS0
37
 
38
Change the "target" definition so that it specifies the tty port that
39
you intend to use.  Change the "remotebaud" definition to match the
40
data rate that you are going to use for the com line (115200 is the
41
default).
42
 
43
Debugging Setup: Target
44
========================
45
 
46
By default, the KGDB stub will communicate with the host GDB using
47
ttySC1 at 115200 baud, 8 databits, no parity; these defaults can be
48
changed in the kernel configuration. As the kernel starts up, KGDB will
49
initialize so that breakpoints, kernel segfaults, and so forth will
50
generally enter the debugger.
51
 
52
This behavior can be modified by including the "kgdb" option in the
53
kernel command line; this option has the general form:
54
 
55
  kgdb=,
56
 
57
The  indicates the port to use, and can optionally specify
58
baud, parity and databits -- e.g. "ttySC0,9600N8" or "ttySC1,19200".
59
 
60
The  can be "halt" or "disabled".  The "halt" action enters the
61
debugger via a breakpoint as soon as kgdb is initialized; the "disabled"
62
action causes kgdb to ignore kernel segfaults and such until explicitly
63
entered by a breakpoint in the code or by external action (sysrq or NMI).
64
 
65
(Both  and  can appear alone, w/o the separating comma.)
66
 
67
For example, if you wish to debug early in kernel startup code, you
68
might specify the halt option:
69
 
70
  kgdb=halt
71
 
72
Boot the TARGET machine, which will appear to hang.
73
 
74
On your DEVELOPMENT machine, cd to the source directory and run the gdb
75
program.  (This is likely to be a cross GDB which runs on your host but
76
is built for an SH target.) If everything is working correctly you
77
should see gdb print out a few lines indicating that a breakpoint has
78
been taken.  It will actually show a line of code in the target kernel
79
inside the gdbstub activation code.
80
 
81
NOTE: BE SURE TO TERMINATE OR SUSPEND any other host application which
82
may be using the same serial port (for example, a terminal emulator you
83
have been using to connect to the target boot code.)  Otherwise, data
84
from the target may not all get to GDB!
85
 
86
You can now use whatever gdb commands you like to set breakpoints.
87
Enter "continue" to start your target machine executing again.  At this
88
point the target system will run at full speed until it encounters
89
your breakpoint or gets a segment violation in the kernel, or whatever.
90
 
91
Serial Ports: KGDB, Console
92
============================
93
 
94
This version of KGDB may not gracefully handle conflict with other
95
drivers in the kernel using the same port. If KGDB is configured on the
96
same port (and with the same parameters) as the kernel console, or if
97
CONFIG_SH_KGDB_CONSOLE is configured, things should be fine (though in
98
some cases console messages may appear twice through GDB).  But if the
99
KGDB port is not the kernel console and used by another serial driver
100
which assumes different serial parameters (e.g. baud rate) KGDB may not
101
recover.
102
 
103
Also, when KGDB is entered via sysrq-g (requires CONFIG_KGDB_SYSRQ) and
104
the kgdb port uses the same port as the console, detaching GDB will not
105
restore the console to working order without the port being re-opened.
106
 
107
Another serious consequence of this is that GDB currently CANNOT break
108
into KGDB externally (e.g. via ^C or ); unless a breakpoint or
109
error is encountered, the only way to enter KGDB after the initial halt
110
(see above) is via NMI (CONFIG_KGDB_NMI) or sysrq-g (CONFIG_KGDB_SYSRQ).
111
 
112
Code is included for the basic Hitachi Solution Engine boards to allow
113
the use of ttyS0 for KGDB if desired; this is less robust, but may be
114
useful in some cases.  (This cannot be selected using the config file,
115
but only through the kernel command line, e.g. "kgdb=ttyS0", though the
116
configured defaults for baud rate etc. still apply if not overridden.)
117
 
118
If gdbstub Does Not Work
119
========================
120
 
121
If it doesn't work, you will have to troubleshoot it.  Do the easy
122
things first like double checking your cabling and data rates.  You
123
might try some non-kernel based programs to see if the back-to-back
124
connection works properly.  Just something simple like cat /etc/hosts
125
/dev/ttyS0 on one machine and cat /dev/ttyS0 on the other will tell you
126
if you can send data from one machine to the other.  There is no point
127
in tearing out your hair in the kernel if the line doesn't work.
128
 
129
If you need to debug the GDB/KGDB communication itself, the gdb commands
130
"set debug remote 1" and "set debug serial 1" may be useful, but be
131
warned: they produce a lot of output.
132
 
133
Threads
134
=======
135
 
136
Each process in a target machine is seen as a gdb thread. gdb thread related
137
commands (info threads, thread n) can be used. CONFIG_KGDB_THREAD must
138
be defined for this to work.
139
 
140
In this version, kgdb reports PID_MAX (32768) as the process ID for the
141
idle process (pid 0), since GDB does not accept 0 as an ID.
142
 
143
Detaching (exiting KGDB)
144
=========================
145
 
146
There are two ways to resume full-speed target execution: "continue" and
147
"detach". With "continue", GDB inserts any specified breakpoints in the
148
target code and resumes execution; the target is still in "gdb mode".
149
If a breakpoint or other debug event (e.g. NMI) happens, the target
150
halts and communicates with GDB again, which is waiting for it.
151
 
152
With "detach", GDB does *not* insert any breakpoints; target execution
153
is resumed and GDB stops communicating (does not wait for the target).
154
In this case, the target is no longer in "gdb mode" -- for example,
155
console messages no longer get sent separately to the KGDB port, or
156
encapsulated for GDB.  If a debug event (e.g. NMI) occurs, the target
157
will re-enter "gdb mode" and will display this fact on the console; you
158
must give a new "target remote" command to gdb.
159
 
160
NOTE: TO AVOID LOSSING CONSOLE MESSAGES IN CASE THE KERNEL CONSOLE AND
161
KGDB USING THE SAME PORT, THE TARGET WAITS FOR ANY INPUT CHARACTER ON
162
THE KGDB PORT AFTER A DETACH COMMAND.  For example, after the detach you
163
could start a terminal emulator on the same host port and enter a ;
164
however, this program must then be terminated or suspended in order to
165
use GBD again if KGDB is re-entered.
166
 
167
 
168
Acknowledgements
169
================
170
 
171
This code was mostly generated by Henry Bell ;
172
largely from KGDB by Amit S. Kale  - extracts from
173
code by Glenn Engel, Jim Kingdon, David Grothe , Tigran
174
Aivazian , William Gatliff , Ben
175
Lee, Steve Chamberlain and Benoit Miller  are also
176
included.
177
 
178
Jeremy Siegel
179

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.