BLOG

Record, summarize, and improve.

kgdb & kdb

kdb指令级内核调试器 kgdb源码级内核调试器

0.配置内核

CONFIG_DEBUG_RODATA = n
CONFIG_FRAME_POINTER = y 使KDB能够打印更多的栈信息
CONFIG_KGDB = y
CONFIG_KGDB_SERIAL_CONSOLE = y
CONFIG_KGDB_KDB = y
CONFIG_KDB_KEYBOARD = y 如果是通过目标版的键盘与KDB通信,需要把这个打开,且键盘不能是USB接口
CONFIG_KALLSYMS = y 加入符号信息

Kernel hacking
CONFIG_DEBUG_INFO = y 包含基本调试信息
CONFIG_DEBUG_KERNEL = y 包含驱动调试信息


1.利用agent-proxy工具复用一个串口,虚拟出两个TCP端口

./agent-proxy 5550^5551 0 /dev/ttyS1,115200 &
ser2net也可以,minicom不稳定


2.将target接入host

telnet localhost 5550


3.1 target进入kdb

echo ttyS2 > /sys/module/kgdboc/parameters/kgdboc
echo g > /proc/sysrq-trigger


3.2 target进入kdb(设置uboot环境变量)

setenv args_mmc 'xxx xxx kgdboc=ttyS2,115200 kgdbwait' 启动后直接进入kdb

setenv args_mmc 'xxx xxx kgdboc=ttyS2,115200'
echo g > /proc/sysrq-trigger


4.利用本地gdb连接target kdb

arm-linux-gnueabihf-gdb vmlinux
set remotebaud 115200
target remote localhost:5551


5.gdb命令&kdb命令

maintenance packet 3 切换到kdb
moniter help 在gdb执行kdb命令

更多GDB命令参考其他


6.退出gdb

CTRL+z
kill -9 %