本文主要是介绍arm linux内核源码级调试器kgdb配置与使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
0x1 介绍
kgdb是源码级调试器,与gdb配合调试linux kenrel,就像使用gdb调试应用程序一样,停止内核运行,可以查看内存,变量和调用栈信息。它可以在源码处设置断点,进行单步调试,函数进入等。
kgdb需要两台机器,目标机和调试主机。调试主机运行gdb时加载含有符号表的vmlinux,调试运行时的目标机内核,gdb指定连接参数连接到kgdb,需要通过目标架构内核中的kgdb I/O modules进行连接,可以是rs232或以太网。
0x2 使用方法
0x21 内核配置
CONFIG_KGDB使能KGDB
Kernel hacking —>
[*] KGDB: kernel debugger —>
CONFIG_KGDB_SERIAL_CONSOLE选项确定串口为KGDB的I/O modules driver
Kernel hacking —>
[*] KGDB: kernel debugger —>
<*> KGDB: use kgdb over the serial console(kgdboc)
CONFIG_DEBUG_RODATA选项会标记某些内存区域为只读属性,影响软件断点的使用,这时候需要关闭。如果处理器支持硬件断点,该选项可以打开
System Type —>
[ ] Make kernel text and rodata read-only
CONFIG_FRAME_POINTER选项更好的支持栈回溯,该选项依赖于CONFIG_HAVE_FUNCTION_GRAPH_TRACER
Kernel hacking —>
[*] Tracers —>
[*] Kernel Function Tracer
[*] Kernel Function Graph Tracer
CONFIG_HAVE_FUNCTION_GRAPH_TRACER选中后CONFIG_FRAME_POINTER默认选中
CONFIG_DEBUG_INFO选项在内核中加入调试信息
Kernel hacking —>
Compile-time checks and compiler options —>
[*] Compile the kernel with debug info
CONFIG_KALLSYMS选项可以在运行时通过name访问符号信息
General setup —>
[*] Configure standard kernel features (expert users) —>
-*- Load all symbols for debugging/ksymoops
#CONFIG_DEBUG_RODATA is not set
CONFIG_KGDB=y
CONFIG_KGDB_SERIAL_CONSOLE=y
CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
CONFIG_FRAME_POINTER=y
CONFIG_DEBUG_INFO=y
CONFIG_KALLSYMS=y
0x22 激活
内核启动参数:
kgdboc=<tty-device>,[baud]
示例1:
添加到内核引导参数
kgdboc=ttyAMA0,115200
示例2:
运行时激活
echo ttyAMA0 > /sys/module/kgdboc/parameters/kgdboc
运行时关闭
echo "" > /sys/module/kgdboc/parameters/kgdboc
0x23 触发
发生oops或fault触发kgdb。或者手动触发kgdb,手动进入命令:
echo g > /proc/sysrq-trigger
0x3 qemu参数
清单 3-1. qmeu运行时 ttyAMA0作为服务器通信IO,控制台转换为tcp服务器
qemu-system-arm -M vexpress-a9 \ -m 512M -kernel ~/src/linux/kernel/vex
这篇关于arm linux内核源码级调试器kgdb配置与使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!