用kgdb 调试模块-第一部分,内核准备

----------------------------------------
kgdb 调试第一部分: 内核的准备
说实话,这些都是很基本的东西, 你基本上也不用刻意去修改什么, 但却往往浪费了大量时间。

这就是熟练和不熟练的差别,关于编译内核,请参考其它文档。

1. 安装ubuntu 10.04 及 vmware tools
    修改一下显示分别率为 1024 * 768,
    打开一个控制终端(application->accessories->terminal). 修改其字体(12号太小,我用14号字体),及scroll 缓冲大小。
    建立更新源。 然后sudo apt-get update, sudo apt-get install vim 试试安装vim
    安装内核源代码, 更新内核
    建议备份一下该虚拟机

----------------------------------------
kgdb 调试:关于内核配置的一些选项。
从2.6 内核始,kgdb 默认编译进内核,下面选项基本不用改变, 了解一下即可。
CONFIG_DEBUG_RODATA: 默认为yes, 要改为no, 建议关闭该选项, 使可以调试跟踪内核数据
CONFIG_KGDB_SERIAL_CONSOLE = y (使用串口进行通信)
Location:
-> Kernel hacking
-> KGDB: kernel debugger
-> KGDB: use kgdb over the serial console

CONFIG_KGDB_LOW_LEVEL_TRAP=y 使能该选项可
以kgdb不依赖notifier_call_chain()机制来获取断点异常,
这样就可以对notifier_call_chain()机制实现相关的函数进行单步调试。
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 debuginfo

CONFIG_FRAME_POINTER = y
该选项将使得内核使用帧指针寄存器来维护堆栈,从而就可以正确地执行堆栈回溯,即函数调用栈信息。
(bt where会用到这些??)
Location:
-> Kernel hacking
->Compile the kernel with frame pointers

MAGIC_SYSRQ CONFIG_MAGIC_SYSRQ = y
(如果你选择了KGDB_SERIAL_CONSOLE,这个选项将自动被选上)
激活"魔术 SysRq"键. 该选项对kgdboc调试非常有用,kgdb向其注册了‘g’魔术键来激活kgdb 。
Location:
-> Kernel hacking
->magic SysRq key
当你想手动激活kgdb时,你可以触发SysRq的g键, 如:
----------------------------------------
gcc 4.6 编译旧内核问题。 linux-2.6.32
----------------------------------------
1. 源代码书写错误
2. makefile 选项改变 -m elf-i386: -m32, -m elf_86_64: -m64
3. 更严格的判断, set but not used variable, unused parameter 等
4. 发现旧代码中瑕疵。 例如duplicated member

----------------------------------------
grub 的修改: (需要了解),知道其含义
----------------------------------------
修改 /etc/default/grub
了解各个条目含义, 基本不用修改, 微调可满足自己的喜好。
GRUB_DEFAULT=0 //设定默认启动项
#GRUB_HIDDEN_TIMEOUT=30 //注释掉这行会显示引导菜单
GRUB_HIDDEN_TIMEOUT_QUIET=false //如果为true,黑屏且不会显示倒计时
GRUB_TIMEOUT=30 //倒计时
GRUB_CMDLINE_LINUX_DEFAULT="rootdelay=90quiet splash text" //text表示命令行方式启动
GRUB_CMDLINE_LINUX=""
运行update-grub2

/boot/grub/grub.cfg修改如下:(修改grub.cfg 是临时的, update-grub 会覆盖掉,注意灵活运用)
menuentry 'Ubuntu, with Linux2.6.32' --class ubuntu --class gnu-linux --class gnu --classos {
...
linux /boot/vmlinuz-2.6.32 root=UUID=78727361-022c-4790-8d39-a17565a4e155 ro rootdelay=90 quiet splash text kgdboc=ttyS1,115200
initrd /boot/initrd.img-2.6.32
}
注意加上kgdboc=ttyS1,115200,kgdbwait不加感觉更好用。 实际上是开机启动kgdb
调试模块可不修改grub, 而采用动态激活kgdb, 具体操作见后述。
-------------------------------------------------


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值