kgdb在内核2.6.26中加入,用于调试内核。kdb是内建的内核调试器,由SGI开发。
两者差异是:
- 使用kgdb需要两个机器,通过网络连接,其中客户端使用gdb。而kdb可以直接在目标机器上调试。
- Kgdb支持C代码级别调试,可以识别内核数据结构,而kdb只能识别汇编级别。
这里两台机器(使用的是两台VBox的虚拟机),一个是目标机器(被调试内核的机器),另一台是开发机器(连接被调试内核的机器)。
要使用kgdb,需要重新编译下内核,先修改相关配置:
[*] Compile the kernel with debug info
[*] KGDB: kernel debugger --->
[*] KGDB_KDB: include kdb frontend for kgdb
CONFIG_DEBUG_INFO选项使得编译中生产调试信息。
CONFIG_STRICT_KERNEL_RWX选项会阻止内核的某些断点,所以禁止(4.15.15中并未看到此项)。并增加KDB。最后查看.config配置文件包含如下:
CONFIG_FRAME_POINTER=y
CONFIG_KGDB=y
CONFIG_KGDB_SERIAL_CONSOLE=y
CONFIG_KGDB_KDB=y
CONFIG_DEBUG_INFO=y
然后进行编译安装,make –j2 && make modules_install && make install
1. 内核参数
在内核启动参数中添加,表示启动,通过串口ttyS0来实现kgdb调试。
kgdbwait kgdboc=ttyS0,115200