Académique Documents
Professionnel Documents
Culture Documents
org
http://elinux.org/KDB
KDB
From eLinux.org
Contents
1 Introduction and basic resources
1.1 Older Information
2 General Information
2.1 Kernel Versions supported
3 Kernel conguration
3.1 Cong variables
3.2 Steps
4 Enabling kdb
4.1 At runtime
4.2 At boot time (via kernel command line)
5 Invoking kdb
5.1 Invoking with Magic SysRq 'g'
5.2 Invocation by panic
5.3 Invocation by breakpoint
6 Using gdb to see the kernel source listing
7 KDB environment variables
8 Hints and tips
8.1 Command line completion
8.2 Dening a set of commands
8.3 Executing commands on kdb initialization
8.4 Piping command results through 'grep'
8.5 Command history
9 Feature extension notes (by Tim)
9.1 internals
1 of 9
KDB - eLinux.org
http://elinux.org/KDB
Older Information
See http://www.ibm.com/developerworks/linux/library/l-kdbug/ for a tutorial for
the 2.4.20 kernel (from June 2003)
Here's an article from 2002 on KDB vs. KGDB: http://kerneltrap.org/node/112
It has a good discussion excerpt between Andrew Morton and Keith Owens
about the relative merits of KDB versus KGDB.
General Information
Kernel Versions supported
kgdb was added to the mainline Linux kernel in version 2.6.26.
kdb support was added to the mainline Linux kernel in version 2.6.35.
Before those versions, kgdb and kdb were available as patches which could be
applied to the Linux kernel source.
Kernel conguration
The following descriptions are for a 2.6.35 kernel, using KDB over a serial line
between host and target:
All these options on are the "Kernel Hacking" menu.
In order to support KDB, "KGDB" support must be turned on rst (even if you
aren't using kgdb/gdb)
2 of 9
KDB - eLinux.org
http://elinux.org/KDB
Cong variables
CONFIG_DEBUG_KERNEL=Y - includes debug information in the kernel
compilation - required for basic kernel debugging support
CONFIG_KGDB=Y - turn on basic kernel debug agent support
CONFIG_KGDB_SERIAL_CONSOLE=Y - to share a serial console with
kgdb.
Sysrq-g must be used to break in initially.
Selecting this will automatically set:
CONFIG_CONSOLE_POLL=Y
CONFIG_MAGIC_SYSRQ=Y - turn on MAGIC-SYSRQ key
support
CONFIG_KGDB_KDB=Y - actually turn on the KDB debugger feature
CONFIG_DEBUG_RODATA=N - you must disable this on x86 in order to
set breakpoints on code or data
Optional other conguration settings:
CONFIG_FRAME_POINTER=Y - this allows for better backtrace support
in KDB
CONFIG_KALLSYMS=Y - this adds symbolic information to the kernel,
useful to see symbols instead of addresses
CONFIG_KDB_KEYBOARD - use KDB with an attached keyboard (not for
use with serial console)
CONFIG_KGDB_TESTS - used to turn on kgdb internal self-tests - see the
cong help for this for more information
Steps
To turn on KDB over serial console, do the following:
'make menucong'
go to "Kernel Hacking" sub-menu
turn on "KGDB: kernel debugger", and choose "<Select>" to go to
sub-menu
verify that "KGDB: use kgdb over the serial console" is set
set "KGDB_KDB: include kdb frontend for kgdb"
save and exit
Results:
[]$ diffconfig
KGDB n -> y
+CONSOLE_POLL y
+KDB_KEYBOARD n
+KGDB_KDB y
+KGDB_SERIAL_CONSOLE y
+KGDB_TESTS n
Enabling kdb
3 of 9
KDB - eLinux.org
http://elinux.org/KDB
At runtime
Once the kernel is compiled with kdb support and is running on your target
board, you need to enable it. This can be done on a running system, binding
the kdb/kgdb feature to a serial port, by writing a value into the sys lesystem.
If your machine starts a serial console on ttyS0, you can bind kdb/kgdb to this
serial console by writing the string "ttyS0" to /sys/module/kgdboc/parameters
/kgdboc. The kernel will respond with a message indicating that that driver is
registered.
$ echo ttyS0 >/sys/module/kgdboc/parameters/kgdboc
kgdb: Registered I/O driver kgdboc.
Invoking kdb
Once the kernel is running, and the kgdb/kdb is bound to the serial console,
you can invoke the debugger in numerous ways.
First, you can enter the debugger using a Magic SysRq (http://en.wikipedia.org
/wiki/Magic_SysRq_key) command.
kdb will also be entered automatically if the kernel panics.
Finally, you can set a breakpoint (either hardware or software), such that the
debugger is invoked when the breakpoint condition is met. For a code
breakpoint, this means when the instruction is executed at the breakpoint
location, and for a data breakpoint, when the particular access is made at the
breakpoint address.
4 of 9
KDB - eLinux.org
http://elinux.org/KDB
Invocation by panic
When a kernel panic occurs, then something has gone seriously wrong and the
kernel automatically enters kdb. From here you can look at memory, do a
traceback, examine registers, and do other operations to nd out more about
the state of the system and debug the problem.
Invocation by breakpoint
To enter kdb using a breakpoint, rst invoke kdb using the Magic SysRq key
(see above), then set a breakpoint. Then type 'go' to continue execution. When
the breakpoint is hit, the debugger shell will appear.
In the example that follows, items in italics are commands typed by a user.
Items following a '$' are commands entered at a shell command (normal Linux
user-space runtime), and items following 'kgdb>' are commands entered at the
kdb interactive shell.
$ echo g >/proc/sysrq-trigger
SysRq: DEBUG
Entering kdb (current=0xdfdff040, pid 71) due to Keyboard Entry
kdb> bp sys_sync+4
Instruction(i) BP #0 at 0xc00c9f00 (sys_sync+0x4)
is enabled addr at 00000000c00c9f00, hardtype=0 installed=0
kdb> go
$ sync
Entering kdb (current=0xdfdaa360, pid 72) due to Breakpoint @ 0xc00c9f00
kdb> bt
Stack traceback for pid 72
0xdfdaa360
72
71 1
0
R 0xdfdaa560 *sync
[<c0028cb4>] (unwind_backtrace+0x0/0xe4) from [<c0026d50>] (show_stack+0x10/0x14)
[<c0026d50>] (show_stack+0x10/0x14) from [<c0079e78>] (kdb_show_stack+0x58/0x80)
[<c0079e78>] (kdb_show_stack+0x58/0x80) from [<c0079f1c>] (kdb_bt1.clone.0+0x7c/0xcc)
[<c0079f1c>] (kdb_bt1.clone.0+0x7c/0xcc) from [<c007a240>] (kdb_bt+0x2d4/0x338)
[<c007a240>] (kdb_bt+0x2d4/0x338) from [<c0078328>] (kdb_parse+0x4d4/0x5f8)
[<c0078328>] (kdb_parse+0x4d4/0x5f8) from [<c0078a8c>] (kdb_main_loop+0x448/0x6b0)
[<c0078a8c>] (kdb_main_loop+0x448/0x6b0) from [<c007acb4>] (kdb_stub+0x210/0x398)
[<c007acb4>] (kdb_stub+0x210/0x398) from [<c0073280>] (kgdb_handle_exception+0x384/0x574)
[<c0073280>] (kgdb_handle_exception+0x384/0x574) from [<c0028518>] (kgdb_brk_fn+0x18/0x20)
[<c0028518>] (kgdb_brk_fn+0x18/0x20) from [<c0022198>] (do_undefinstr+0x10c/0x1a8)
[<c0022198>] (do_undefinstr+0x10c/0x1a8) from [<c0022b84>] (__und_svc+0x44/0x60)
Exception stack(0xdfe09f58 to 0xdfe09fa0)
9f40:
00000000 bec93e74
9f60: 000437ac 00034738 00000001 bec93e74 00000049 00000024 c00230e8 dfe08000
9f80: 00000000 bec93e54 00000000 dfe09fa0 c0022f40 c00c9f00 80000013 ffffffff
[<c0022b84>] (__und_svc+0x44/0x60) from [<c00c9f00>] (sys_sync+0x4/0x28)
[<c00c9f00>] (sys_sync+0x4/0x28) from [<c0022f40>] (ret_fast_syscall+0x0/0x30)
kdb>
5 of 9
KDB - eLinux.org
http://elinux.org/KDB
then resuming execution with 'go'. Then, at the Linux user-space shell, the
'sync' command is run to cause the breakpoint to occur. When kdb is entered
due to the breakpoint, then 'bt' is run to get a backtrace from the stack of the
current process.
6 of 9
KDB - eLinux.org
http://elinux.org/KDB
7 of 9
KDB - eLinux.org
http://elinux.org/KDB
And if there are spaces in the pattern, you may quote it:
"pat tern" or "^pat tern" or "pat tern$" or "^pat tern$"
Command history
You can access the command history by typing up-arrow and down-arrow, and
select a previous command to run.
If you hit <enter> without typing a command, sometimes (when it makes
sense) the last command run will be run again. For 'md' commands, the next
command will continue at the address where the last command left o.
8 of 9
KDB - eLinux.org
http://elinux.org/KDB
internals
internal functions to retrieve environment variables:
kdbgetintenv()
kdbgetenv()
kdbgetulenv() - get unsigned long env variable
Retrieved from "http://elinux.org/index.php?title=KDB&oldid=80282"
Category: Development Tools
This page was last modied on 19 December 2011, at 10:57.
This page has been accessed 160,145 times.
Content is available under a Creative Commons Attribution-ShareAlike 3.0
Unported License unless otherwise noted.
9 of 9