After compiling the kernel inside VirtualBox, copy out the vmlinux to the host, where "gdb" command is to be issued.

Add "kgdboc=ttyS0,115200 kgdbwait" at the end of the kernel line inside the /boot/grub/grub.cfg.

socat -d -d /tmp/serial1204 pty

after that "/dev/pts/6" is printed.

Use that information below:


gdb ./vmlinux (where vmlinux is the compiled vmlinux image from inside the VirtualBox).

(gdb) set remotebaud  115200
(gdb) target remote /dev/pts/6
Remote debugging using /dev/pts/6
kgdb_breakpoint () at kernel/debug/debug_core.c:987
987    kernel/debug/debug_core.c: No such file or directory.
    in kernel/debug/debug_core.c
(gdb) bt
#0  kgdb_breakpoint () at kernel/debug/debug_core.c:987
#1  0xffffffff810cf486 in kgdb_initial_breakpoint (
    new_dbg_io_ops=0xffffffff81c7f9e0) at kernel/debug/debug_core.c:885
#2  kgdb_register_io_module (new_dbg_io_ops=0xffffffff81c7f9e0)
    at kernel/debug/debug_core.c:927
#3  0xffffffff813e4d94 in configure_kgdboc ()
    at drivers/tty/serial/kgdboc.c:197
#4  0xffffffff81d2709e in init_kgdboc () at drivers/tty/serial/kgdboc.c:219
#5  0xffffffff8100203f in do_one_initcall (fn=0xffffffff81d2708a <init_kgdboc>)
    at init/main.c:678
#6  0xffffffff81cf2d53 in do_initcall_level (unused=<value optimized out>)
    at init/main.c:753
#7  do_initcalls (unused=<value optimized out>) at init/main.c:761
#8  do_basic_setup (unused=<value optimized out>) at init/main.c:780
#9  kernel_init (unused=<value optimized out>) at init/main.c:863
#10 0xffffffff816608e4 in ?? () at arch/x86/kernel/entry_64.S:1204
#11 0x0000000000000000 in ?? ()
(gdb) s
988    in kernel/debug/debug_core.c
(gdb) bt
#0  kgdb_breakpoint () at kernel/debug/debug_core.c:988
#1  0xffffffff810cf486 in kgdb_initial_breakpoint (
    new_dbg_io_ops=0xffffffff81c7f9e0) at kernel/debug/debug_core.c:885
#2  kgdb_register_io_module (new_dbg_io_ops=0xffffffff81c7f9e0)
    at kernel/debug/debug_core.c:927
#3  0xffffffff813e4d94 in configure_kgdboc ()
    at drivers/tty/serial/kgdboc.c:197
#4  0xffffffff81d2709e in init_kgdboc () at drivers/tty/serial/kgdboc.c:219
#5  0xffffffff8100203f in do_one_initcall (fn=0xffffffff81d2708a <init_kgdboc>)
    at init/main.c:678
#6  0xffffffff81cf2d53 in do_initcall_level (unused=<value optimized out>)
    at init/main.c:753
#7  do_initcalls (unused=<value optimized out>) at init/main.c:761
#8  do_basic_setup (unused=<value optimized out>) at init/main.c:780
#9  kernel_init (unused=<value optimized out>) at init/main.c:863
#10 0xffffffff816608e4 in ?? () at arch/x86/kernel/entry_64.S:1204
#11 0x0000000000000000 in ?? ()
(gdb) s
atomic_dec () at /root/linux_latest/arch/x86/include/asm/atomic.h:107
107    /root/linux_latest/arch/x86/include/asm/atomic.h: No such file or directory.
    in /root/linux_latest/arch/x86/include/asm/atomic.h
(gdb) s
kgdb_breakpoint () at kernel/debug/debug_core.c:989
989    kernel/debug/debug_core.c: No such file or directory.
    in kernel/debug/debug_core.c
(gdb) s
kgdb_register_io_module (new_dbg_io_ops=0xffffffff81c7f9e0)
    at kernel/debug/debug_core.c:930
930    in kernel/debug/debug_core.c
(gdb) s
configure_kgdboc () at drivers/tty/serial/kgdboc.c:198
198    drivers/tty/serial/kgdboc.c: No such file or directory.
    in drivers/tty/serial/kgdboc.c
(gdb) s
197    in drivers/tty/serial/kgdboc.c
(gdb) bt
#0  configure_kgdboc () at drivers/tty/serial/kgdboc.c:197
#1  0xffffffff81d2709e in init_kgdboc () at drivers/tty/serial/kgdboc.c:219
#2  0xffffffff8100203f in do_one_initcall (fn=0xffffffff81d2708a <init_kgdboc>)
    at init/main.c:678
#3  0xffffffff81cf2d53 in do_initcall_level (unused=<value optimized out>)
    at init/main.c:753
#4  do_initcalls (unused=<value optimized out>) at init/main.c:761
#5  do_basic_setup (unused=<value optimized out>) at init/main.c:780
#6  kernel_init (unused=<value optimized out>) at init/main.c:863
#7  0xffffffff816608e4 in ?? () at arch/x86/kernel/entry_64.S:1204
#8  0x0000000000000000 in ?? ()
(gdb)

By setting breakpoints at "printk", we can see all the stacktrace when the kernel is printing its output to the dmesg:

(gdb) break printk
Breakpoint 1 at 0xffffffff8164c7c6: file kernel/printk.c, line 753.
(gdb) cont
Continuing.

Breakpoint 1, printk (
    fmt=0xffffffff81a4f278 "<6>Linux agpgart interface v%d.%d\n")
    at kernel/printk.c:753
753            }
(gdb) bt
#0  printk (fmt=0xffffffff81a4f278 "<6>Linux agpgart interface v%d.%d\n")
    at kernel/printk.c:753
#1  0xffffffff81d27467 in agp_init () at drivers/char/agp/backend.c:338
#2  agp_init () at drivers/char/agp/backend.c:335
#3  0xffffffff8100203f in do_one_initcall (fn=0xffffffff81d27445 <agp_init>)
    at init/main.c:678
#4  0xffffffff81cf2d53 in do_initcall_level (unused=<value optimized out>)
    at init/main.c:753
#5  do_initcalls (unused=<value optimized out>) at init/main.c:761
#6  do_basic_setup (unused=<value optimized out>) at init/main.c:780
#7  kernel_init (unused=<value optimized out>) at init/main.c:863
#8  0xffffffff816608e4 in ?? () at arch/x86/kernel/entry_64.S:1204
#9  0x0000000000000000 in ?? ()
(gdb) cont
Continuing.
[New Thread 19]
[Switching to Thread 19]

Breakpoint 1, printk (
    fmt=0xffffffff819ed780 "<6>Refined TSC clocksource calibration: %lu.%03lu MHz.\n") at kernel/printk.c:753
753            }
(gdb) bt
#0  printk (
    fmt=0xffffffff819ed780 "<6>Refined TSC clocksource calibration: %lu.%03lu MHz.\n") at kernel/printk.c:753
#1  0xffffffff8101a4a1 in tsc_refine_calibration_work (
    work=<value optimized out>) at arch/x86/kernel/tsc.c:915
#2  0xffffffff8106d26a in process_one_work (worker=<value optimized out>,
    work=0xffffffff81c18e60) at kernel/workqueue.c:1866
#3  0xffffffff8106e2d5 in worker_thread (__worker=0xffff88003dbb4b80)
    at kernel/workqueue.c:1977
#4  0xffffffff81072d63 in kthread (_create=0xffff88003da57d28)
    at kernel/kthread.c:121
#5  0xffffffff816608e4 in ?? () at arch/x86/kernel/entry_64.S:1204
#6  0x0000000000000000 in ?? ()
(gdb) cont
Continuing.
[Switching to Thread 1]

Breakpoint 1, printk (fmt=0xffffffff81a37d88 "<6>brd: module loaded\n")
    at kernel/printk.c:753
753            }
(gdb) bt
#0  printk (fmt=0xffffffff81a37d88 "<6>brd: module loaded\n")
    at kernel/printk.c:753
#1  0xffffffff81d2818b in brd_init () at drivers/block/brd.c:624
#2  0xffffffff8100203f in do_one_initcall (fn=0xffffffff81d2803c <brd_init>)
    at init/main.c:678
#3  0xffffffff81cf2d53 in do_initcall_level (unused=<value optimized out>)
    at init/main.c:753
#4  do_initcalls (unused=<value optimized out>) at init/main.c:761
#5  do_basic_setup (unused=<value optimized out>) at init/main.c:780
#6  kernel_init (unused=<value optimized out>) at init/main.c:863
#7  0xffffffff816608e4 in ?? () at arch/x86/kernel/entry_64.S:1204
#8  0x0000000000000000 in ?? ()
(gdb) cont
Continuing.
[Switching to Thread 19]

Breakpoint 1, printk (
    fmt=0xffffffff81a01830 "<6>Switching to clocksource %s\n")
    at kernel/printk.c:753
753            }
(gdb) bt
#0  printk (fmt=0xffffffff81a01830 "<6>Switching to clocksource %s\n")
    at kernel/printk.c:753
#1  0xffffffff810a0294 in clocksource_select ()
    at kernel/time/clocksource.c:594
#2  clocksource_select () at kernel/time/clocksource.c:564
#3  0xffffffff810a0997 in __clocksource_register_scale (cs=0xffffffff81c18d80,
    scale=<value optimized out>, freq=<value optimized out>)
    at kernel/time/clocksource.c:721
#4  0xffffffff8101a3e1 in clocksource_register_khz (work=<value optimized out>)
    at include/linux/clocksource.h:309
#5  tsc_refine_calibration_work (work=<value optimized out>)
    at arch/x86/kernel/tsc.c:920
#6  0xffffffff8106d26a in process_one_work (worker=<value optimized out>,
    work=0xffffffff81c18e60) at kernel/workqueue.c:1866
#7  0xffffffff8106e2d5 in worker_thread (__worker=0xffff88003dbb4b80)
    at kernel/workqueue.c:1977
#8  0xffffffff81072d63 in kthread (_create=0xffff88003da57d28)
    at kernel/kthread.c:121
#9  0xffffffff816608e4 in ?? () at arch/x86/kernel/entry_64.S:1204
#10 0x0000000000000000 in ?? ()
(gdb)


And so on.....

Now boot up all the way by deleting all the breakpoints:

(gdb) delete
Delete all breakpoints? (y or n) y
(gdb) cont
Continuing.



Reply via email to