Ubuntu8.04(kernel2.6.24-26)下配置Qemu+kgdb调试内核(kernel2.6.36.2)小记

Ubuntu8.04(kernel2.6.24-26)下配置Qemu+kgdb调试内核(kernel2.6.36.2)小记

 

Qemu安装:

apt-get install qemu

并从Qemu官网下载linux-0.2.img文件备用

 

内核编译环境配置:

安装build-essential,命令apt-get install build-essential

安装ncurses-dev(make menuconfig需要),命令apt-get install ncurses-dev

其他的软件包参考源码目录下Documentation/Changes列出的软件列表,没有的就使用apt-get install安装,已有的就使用Ubuntu8.04默认已经安装的版本。isdn4k-utils这个用不着不安装。

 

内核编译:

配置内核:make defconfig先产生一默认的.config文件,然后make menuconfig有菜单出来后读入先前产生的.config文件,更改一些选项。具体参见:http://www.kgdb.info/kgdb/use_kgdb/enable_kgdb_option/

kgdb内核选项配置

2010628DDD发表评论阅读评论

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

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

?[Copy to clipboard]View Code BASH

$ make menuconfig

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

?[Copy to clipboard]View Code EXPERIMENTAL

CONFIG_EXPERIMENTAL = y
 Location:
      -> General setup 
         -> Prompt for development and/or incomplete code/drivers

?[Copy to clipboard]View Code KGDB

CONFIG_KGDB = y 
 Location:    
      -> Kernel hacking   
         -> KGDB: kernel debugger

?[Copy to clipboard]View Code KGDB_SERIAL_CONSOLE

CONFIG_KGDB_SERIAL_CONSOLE = y (使用串口进行通信)
 Location:    
      -> Kernel hacking   
         -> KGDB: kernel debugger
              -> KGDB: use kgdb over the serial console

2 其它相关内核选项:

2.1 建议关闭的选项

?[Copy to clipboard]View Code DEBUG_RODATA

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

2.2.2 建议打开的选项

?[Copy to clipboard]View Code KGDB_LOW_LEVEL_TRAP

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的缘由详情,可参考这里

?[Copy to clipboard]View Code DEBUG_INFO

CONFIG_DEBUG_INFO = y
该选项可以使得编译的内核包含一些调试信息,使得调试更容易。
Location: 
     -> Kernel hacking

?[Copy to clipboard]View Code FRAME_POINTER

CONFIG_FRAME_POINTER = y
该选项将使得内核使用帧指针寄存器来维护堆栈,从而就可以正确地执行堆栈回溯,即函数调用栈信息。
Location: 
     -> Kernel hacking

?[Copy to clipboard]View Code MAGIC_SYSRQ

CONFIG_MAGIC_SYSRQ = y (如果你选择了KGDB_SERIAL_CONSOLE,这个选项将自动被选上)
激活"魔术 SysRq". 该选项对kgdboc调试非常有用,kgdb向其注册了‘g’魔术键来激活kgdb 
Location: 
     -> Kernel hacking

按上述配置好后,使用vim打开.config文件确认无误。

执行make bzImage命令开始编译内核。

编译完成后开始调试:

复制linux-0.2.img到当前源码的顶层目录,开启一终端窗口并进入源码目录,执行如下命令启动Qemu:qemu -S -kernel ./arch/x86/boot/bzImage -hda linux-0.2.img -append "root=/dev/sda" 注:S为大写

Qemu启动后出一黑色窗口,Ctrl+Alt+2转到该窗口中,输入gdbserver 回车,然后可以看到看到等待远程调试,tcp1234之类信息,再在当前目录下开启一终端输入gdb vmlinux,出现类似如下信息(此信息在Ubuntu 11.10所显示, Ubuntu8.04下的信息也几乎差不多):

kendy@kdpc:~/Downloads/linux-2.6.36.2$ gdbvmlinux

GNU gdb (Ubuntu/Linaro 7.3-0ubuntu2)7.3-2011.08

Copyright (C) 2011 Free SoftwareFoundation, Inc.

License GPLv3+: GNU GPL version 3 or later<http://gnu.org/licenses/gpl.html>

This is free software: you are free tochange and redistribute it.

There is NO WARRANTY, to the extentpermitted by law.  Type "showcopying"

and "show warranty" for details.

This GDB was configured as"i686-linux-gnu".

For bug reporting instructions, please see:

<http://bugs.launchpad.net/gdb-linaro/>...

Reading symbols from /home/kendy/Downloads/linux-2.6.36.2/vmlinux...done.

(gdb)

然后在(gdb)后输 target remote localhost:1234 回车,出现

Remote debugging using localhost:1234

0x0000fff0 in ?? ()

(gdb)

此时可以设置断点。如bstart_kernel 回车

c 回车即可停在断点处。


补充:如果内核启动后有如下错误信息:

Kernel panic - not syncing:VFS:Unable tomount root fs on unknow-block(x,x)

在使用makemenuconfig配置内核时需要选取支持ext2文件系统(linux-0.2.img使用EXT2?)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值