Ubuntu8.04(kernel2.6.24-26)下配置Qemu+kgdb调试内核(kernel2.6.36.2)小记
2012-08-03 10:29
507 查看
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内核选项配置
2010年6月28日DDD发表评论阅读评论
从Linux 2.6.25起,KGDB被集成到Linux内核中,这使得kgdb的使用变得简单和轻松。
运行如下命令启动配置内核脚本。
?[Copy
to clipboard]View Code BASH
1 KGDB必须使能的内核选项:
?[Copy
to clipboard]View Code EXPERIMENTAL
?[Copy
to clipboard]View Code KGDB
?[Copy
to clipboard]View Code KGDB_SERIAL_CONSOLE
2 其它相关内核选项:
2.1 建议关闭的选项
?[Copy
to clipboard]View Code DEBUG_RODATA
2.2.2 建议打开的选项
?[Copy
to clipboard]View Code KGDB_LOW_LEVEL_TRAP
关于KGDB_LOW_LEVEL_TRAP的缘由详情,可参考这里。
?[Copy
to clipboard]View Code DEBUG_INFO
?[Copy
to clipboard]View Code FRAME_POINTER
?[Copy
to clipboard]View Code MAGIC_SYSRQ
按上述配置好后,使用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 回车,然后可以看到看到等待远程调试,tcp:1234之类信息,再在当前目录下开启一终端输入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?)
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内核选项配置
2010年6月28日DDD发表评论阅读评论
从Linux 2.6.25起,KGDB被集成到Linux内核中,这使得kgdb的使用变得简单和轻松。
运行如下命令启动配置内核脚本。
?[Copy
to clipboard]View Code BASH
$ make menuconfig |
?[Copy
to clipboard]View Code EXPERIMENTAL
CONFIG_EXPERIMENTAL = y Location: -> General setup -> Prompt for development and/or incomplete code/drivers |
to clipboard]View Code KGDB
CONFIG_KGDB = y Location: -> Kernel hacking -> KGDB: kernel debugger |
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.1 建议关闭的选项
?[Copy
to clipboard]View Code DEBUG_RODATA
CONFIG_DEBUG_RODATA = n 该选项是将内核的一些内存区域空间设置为只读,这样可能导致kgdb的 设置软断点功能失效。所以推荐将该选项关闭。 Location: -> Kernel hacking |
?[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]) |
?[Copy
to clipboard]View Code DEBUG_INFO
CONFIG_DEBUG_INFO = y 该选项可以使得编译的内核包含一些调试信息,使得调试更容易。 Location: -> Kernel hacking |
to clipboard]View Code FRAME_POINTER
CONFIG_FRAME_POINTER = y 该选项将使得内核使用帧指针寄存器来维护堆栈,从而就可以正确地执行堆栈回溯,即函数调用栈信息。 Location: -> Kernel hacking |
to clipboard]View Code MAGIC_SYSRQ
CONFIG_MAGIC_SYSRQ = y (如果你选择了KGDB_SERIAL_CONSOLE,这个选项将自动被选上) 激活"魔术 SysRq"键. 该选项对kgdboc调试非常有用,kgdb向其注册了‘g’魔术键来激活kgdb 。 Location: -> Kernel hacking |
执行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 回车,然后可以看到看到等待远程调试,tcp:1234之类信息,再在当前目录下开启一终端输入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?)
相关文章推荐
- linux内核调试:kgdb,配置kgdb调试环境
- 使用qemu进行内核kgdb调试(ubuntu)
- 使用qemu和kgdb调试内核
- 使用KGDB调试内核 on QEMU
- 在VMware环境下,使用KGDB调试内核及内核模块---基于kernel 2.6.36
- 在VMware环境下,使用KGDB调试内核及内核模块---基于kernel 2.6.36
- 在VMware环境下,使用KGDB调试内核及内核模块---基于kernel 2.6.36
- QEMU+KGDB 调试ARM内核模块
- ubuntu12.04 下 利用 qemu kgdb 调试kernel
- 使用qemu + KGDB调试内核
- Windows Server 2008 R2 如何启动kernel dbg进行双机内核调试『配置详解』
- qemu+kgdb调试内核模块笔记
- 在VMware环境下,使用KGDB调试内核及内核模块---基于kernel 2.6.26
- 使用qemu和kgdb调试内核
- 在VMware环境下,使用KGDB调试内核及内核模块---基于kernel 2.6.36
- Linux内核调试之:ddd+qemu+busybox环境配置
- 在VMware环境下,使用KGDB调试内核及内核模块---基于kernel 2.6.26
- QEMU + KGDB调试内核模块
- 第四期 QEMU调试Linux内核实验 《虚拟机就是开发板》
- Windows调试工具入门-3-WinDbg内核调试配置