收藏于 2013-04-12
迁移自本人的百度空间
--------------------------------
从Linux 2.6.25起, KGDB被集成到Linux内核中,这使得kgdb的使用变得简单和轻松。
要使用kgdb调试内核和驱动,必须先对内核进行如下配置。
笔者使用的内核版本是3.8.6
运行如下命令启动配置内核脚本。
$ makemenuconfig
1 KGDB必须使能的内核选项:
CONFIG_EXPERIMENTAL = y Location: -> General setup
-> Prompt for development and/or incomplete code/drivers
CONFIG_KGDB = y Location: -> Kernel hacking
-> KGDB: kernel debugger
CONFIG_KGDB_SERIAL_CONSOLE = y (使用串口进行通信) Location: -> Kernel hacking
-> KGDB: kernel debugger
-> KGDB: use kgdb over the serial console
2 其它相关内核选项:
2.1 建议关闭的选项
CONFIG_DEBUG_RODATA = n 该选项是将内核的一些内存区域空间设置为只读,这样可能导致kgdb的 设置软断点功能失效。所以推荐将该选项关闭。 Location: -> Kernel hacking
-> Write protect kernel read-only data structures
2.2.2 建议打开的选项
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: Allow debugging with traps in notifiers
CONFIG_DEBUG_INFO = y 该选项可以使得编译的内核包含一些调试信息,使得调试更容易。
Location: -> Kernel hacking
-> Compile the kernel with debug info
CONFIG_FRAME_POINTER = y 该选项将使得内核使用帧指针寄存器来维护堆栈,从而就可以正确地执行堆栈回溯,即函数调用栈信息。
Location: -> Kernel hacking
-> Compile the kernel with frame pointers
CONFIG_MAGIC_SYSRQ = y (如果你选择了KGDB_SERIAL_CONSOLE,这个选项将自动被选上) 激活"魔术 SysRq"键. 该选项对kgdboc调试非常有用,kgdb向其注册了‘g’魔术键来激活kgdb 。
Location: -> Kernel hacking
当你想手动激活kgdb时,你可以触发SysRq的g键, 如:
$ echo"g">/proc/sysrq-trigger