User Tools

Site Tools


mywiki:linux:kgdb

This is an old revision of the document!


Kernel debugging kgdb

Kernel configure

kgdb内核配置

  • 在 menuconfig 中选中 Kernel hacking → kernel debugging → KGDB: kernel debugger,使能 kgdb
  • 在 menuconfig 中选中 Kernel hacking → Compile-time checks and compiler options → Compile the kernel with debug info, 生成调试信息.
  • 检查最后的 config ,关闭选项 CONFIG_STRICT_KERNEL_RWX. 这个选项会使得运行周边内存为只读状态.

使能串口或者网口驱动,使得主机可以连接嵌入式板.

使用串口连接的配置如下:

# CONFIG_STRICT_KERNEL_RWX is not set
CONFIG_FRAME_POINTER=y
CONFIG_KGDB=y
CONFIG_KGDB_SERIAL_CONSOLE=y
CONFIG_DEBUG_INFO=y

kdb 内核配置

kdb 配置要在 kgdb内核配置 的基础上继续进行如下配置:

  • 在 menuconfig 中选中 Kernel hacking → kernel debugging → KGDB: kernel debugger → KGDB_KDB: include kdb frontend for kgdb 使能 kdb
  • 当需要使用键盘与 kdb 交互时, 需要在 menuconfig 中选中 Kernel hacking → kernel debugging → KGDB: kernel debugger → KGDB_KDB: keyboard as input device 使能键盘

最终在 config 文件中的配置如下:

#CONFIG_STRICT_KERNEL_RWX is not set
CONFIG_FRAME_POINTER=y
CONFIG_KGDB=y
CONFIG_SERIAL_CONSOLE=y
CONFIG_DEBUG_INFO=y
CONFIG_KGDB_KDB=y
CONFIG_KDB_KEYBOARD=y

Target side configuration

  • echo ttyS0,115200 > /sys/module/kgdboc/parameters/kgdboc
  • echo g > /proc/sysrq-trigger
    • If you want to start the debugging when the kernel starts loading, append to the command line parameters of the kernel. You must use this order! First you must register the I/O driver and then kgdb will be able to wait.
      • kgdboc=ttyS0,115200 kgdbwait
      • console=ttyS0,115200 kgdboc=ttyS0,115200 nokaslr ???
  • To check whether kgdb is enabled/disabled:
    • root@babu-VirtualBox:~# cat /sys/module/kgdboc/parameters/kgdboc
    • ttyS0,115200
  • #disable
    • echo “” > /sys/module/kgdboc/paramters/kgdboc

Host side configuration

# connect target via serial port
% sudo gdb ./vmlinux
(gdb) **set serial baud 115200**
(gdb) **target remote /dev/ttyS0**

#connect target via networking
% gdb ./vmlinux
(gdb) target remote 192.168.2.2:2012

Note:

  • /dev/tty0 is also by default virtual console;
  • /dev/tty is kind of an alias to the console (physical, virtual or pseudo device, if any) associated to the process that open it
  • *

Using kgdb, kdb and the kernel debugger internals: https://www.kernel.org/doc/html/latest/dev-tools/kgdb.html

Setup

Debugging between VM ↔ VM: http://www.alexlambert.com/2017/12/18/kernel-debugging-for-newbies.html

  • Disable KASLR on the debuggee machine via grub configuration

set up gdb envrionment

https://www.tecmint.com/install-kvm-on-ubuntu/

mywiki/linux/kgdb.1625276702.txt.gz · Last modified: (external edit)