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. |