kgdb内核选项配置

/ 2评 / 0

从Linux 2.6.25起, KGDB被集成到Linux内核中,这使得kgdb的使用变得简单和轻松。

运行如下命令启动配置内核脚本。

1
$ make menuconfig

1 KGDB必须使能的内核选项:

1
2
3
4
CONFIG_EXPERIMENTAL = y
 Location:
	-> General setup 
	   -> Prompt for development and/or incomplete code/drivers
1
2
3
4
CONFIG_KGDB = y 
 Location:    
	-> Kernel hacking   
	   -> KGDB: kernel debugger
1
2
3
4
5
CONFIG_KGDB_SERIAL_CONSOLE = y (使用串口进行通信)
 Location:    
	-> Kernel hacking   
	   -> KGDB: kernel debugger
              -> KGDB: use kgdb over the serial console

2 其它相关内核选项:

2.1 建议关闭的选项

1
2
3
4
5
6
CONFIG_DEBUG_RODATA = n
该选项是将内核的一些内存区域空间设置为只读,这样可能导致kgdb的
设置软断点功能失效。所以推荐将该选项关闭。
 
Location: 
     -> Kernel hacking

2.2.2 建议打开的选项

1
2
3
4
5
6
7
CONFIG_KGDB_LOW_LEVEL_TRAP = y                                                               
使能该选项可以kgdb不依赖notifier_call_chain()机制来获取断点异常,
这样就可以对notifier_call_chain()机制实现相关的函数进行单步调试。
Depends on: KGDB [=y] && (X86 [=y] || MIPS [=MIPS])
Location: 
     -> Kernel hacking  
       -> KGDB: kernel debugger (KGDB [=y])

关于KGDB_LOW_LEVEL_TRAP的缘由详情,可参考这里

1
2
3
4
CONFIG_DEBUG_INFO = y
该选项可以使得编译的内核包含一些调试信息,使得调试更容易。
Location: 
     -> Kernel hacking
1
2
3
4
CONFIG_FRAME_POINTER = y
该选项将使得内核使用帧指针寄存器来维护堆栈,从而就可以正确地执行堆栈回溯,即函数调用栈信息。
Location: 
     -> Kernel hacking
1
2
3
4
5
CONFIG_MAGIC_SYSRQ = y (如果你选择了KGDB_SERIAL_CONSOLE,这个选项将自动被选上)
激活"魔术 SysRq"键. 该选项对kgdboc调试非常有用,kgdb向其注册了‘g’魔术键来激活kgdb 。
 
Location: 
     -> Kernel hacking

当你想手动激活kgdb时,你可以触发SysRq的g键, 如:

1
$ echo "g" > /proc/sysrq-trigger

2条回应:“kgdb内核选项配置”

  1. […] 一般软件调试的原理是,调试器根据目标文件的调试信息找到源码和机器码之间的映射 关系,并把它关心的指令替换成一条断点指令,x86 对应的就是 asm(“int $3″),它的二进制代 码是 0xcc.当程序执行到这个地方时断点指令被执行,程序被中断,调试器接管它的控制权, 这时可以查看内存信息甚至修改内存.当调试器完成任务后把断点指令替换回原来的指令, 并把 pc 寄存器减一,让 cpu 从被中断的那条指令开始执行.这样程序可以在没有影响执行的 情况下被调试. 调试内核也离不开一般原理,只不过内核不同一般程序,不能单靠同一台机的 gdb 来完成. 要依靠 kgdb,它是内核里面的一小段程序,它可以和另外一台机器上的 gdb 进行通信,可以执行 gdb 过来的一些命令并返回信息,完成调试过程. 关于kgdb的配置,网上有很多,而且非常详细,这里就不重复了. […]

  2. […] 需确保如下选项被选中(参考kgdb内核选项配置) ?View Code BASH General setup —> [ * ] Prompt for development and/or incomplete code/drivers Kernel hacking  —> [ * ] Compile the kernel with debug info [ * ] Compile the kernel with frame pointers [ * ] KGDB: kernel debugger —> < * > KGDB: use kgdb over the serial console […]

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据