Chapter 5. Using kgdb / gdb
Prev |  | Next

# Chapter 5. Using kgdb / gdb

In order to use kgdb you must activate it by passing configuration information to one of the kgdb I/O drivers. If you do not pass any configuration information kgdb will not do anything at all. Kgdb will only actively hook up to the kernel trap hooks if a kgdb I/O driver is loaded and configured. If you unconfigure a kgdb I/O driver, kgdb will unregister all the kernel hook points.

All kgdb I/O drivers can be reconfigured at run time, if CONFIG_SYSFS and CONFIG_MODULES are enabled, by echo'ing a new config string to `/sys/module/<driver>/parameter/<option>`. The driver can be unconfigured by passing an empty string. You cannot change the configuration while the debugger is attached. Make sure to detach the debugger with the `detach` command prior to trying to unconfigure a kgdb I/O driver.

## Connecting with gdb to a serial port

1. Configure kgdboc

   Boot kernel with arguments:

   - `kgdboc=ttyS0,115200`

   OR

   Configure kgdboc after the kernel booted:

   - `echo ttyS0 > /sys/module/kgdboc/parameters/kgdboc`

2. Stop kernel execution (break into the debugger)

   In order to connect to gdb via kgdboc, the kernel must first be stopped. There are several ways to stop the kernel which include using kgdbwait as a boot argument, via a sysrq-g, or running the kernel until it takes an exception where it waits for the debugger to attach.

   - When logged in as root or with a super user session you can run:

     `echo g > /proc/sysrq-trigger`

   - Example using minicom 2.2

     Press: `Control-a`

     Press: `f`

     Press: `g`

   - When you have telneted to a terminal server that supports sending a remote break

     Press: `Control-]`

     Type in:`send break`

     Press: `Enter`

     Press: `g`

3. Connect from from gdb

   Example (using a directly connected port):

           % gdb ./vmlinux
           (gdb) set remotebaud 115200
           (gdb) target remote /dev/ttyS0

   Example (kgdb to a terminal server on TCP port 2012):

           % gdb ./vmlinux
           (gdb) target remote 192.168.2.2:2012

   Once connected, you can debug a kernel the way you would debug an application program.

   If you are having problems connecting or something is going seriously wrong while debugging, it will most often be the case that you want to enable gdb to be verbose about its target communications. You do this prior to issuing the `target remote` command by typing in: `set debug remote 1`

Remember if you continue in gdb, and need to "break in" again, you need to issue an other sysrq-g. It is easy to create a simple entry point by putting a breakpoint at `sys_sync` and then you can run "sync" from a shell or script to break into the debugger.

Prev |  | Next
Quick start for kdb using a keyboard connected console | Home | Chapter 6. kgdb and kdb interoperability