开发者社区> harrylee007> 正文

使用gdb调试linux内核

简介: 使用Gdb+qemu调试内核: 我们调试内核需要一个叫qemu的虚拟机,qemu虚拟的一个好处便是可以让cpu处于冻结状态,从而让操作系统处于暂停状态,这样我们才能很方便的调试内核。
+关注继续查看

使用Gdb+qemu调试内核:

我们调试内核需要一个叫qemu的虚拟机,qemu虚拟的一个好处便是可以让cpu处于冻结状态,从而让操作系统处于暂停状态,这样我们才能很方便的调试内核。首先使用qemu安装一个操作系统,再将该操作系统的内核换成我们要调试的。

安装qemu:

在ubuntu10.10下用# sudo apt-get install qemu下载最新的qemu版本

从已经装好的操作系统ubuntu9.10_32.img的硬盘启动,测试qemu是否可以运行:

# qemu –hadubuntu9.10_32.img


基本安装结束后,开始进入调试阶段:

http://www.kernel.org/pub/linux/kernel/v2.6/

下载linux2.6内核,本实验使用编译的内核为linux2.6.30

# cd/Downloads

#wget  http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.30.tar.bz2

# tar –jxvf  linux2.6.30.tar.bz2

# cdlinux-2.6.30

下面我们需要编译自己的内核,产生image文件bzImage和内核ELF文件vmlinux,具体的编译过程参考技术博客:http://www.cyberciti.biz/tips/compiling-linux-kernel-26.html

# make menuconfig

# make

编译后会在./arch/x86/boot/ 下生成bzImage文件:

注:编译时间很长,由于我没有对内核进行裁剪,以后编译时可以参考:

http://lamp.linux.gov.cn/Linux/kernel_options.html来对配置文件进行裁剪,对不需要的模块要进行裁剪,可以采用先剪裁几个模块后进行编译,没有错误后再进行裁剪编译,最大程度上上保持内核配置的正确性,在这方面必须要加强,不能拿来个内核全都编译,这样时间和空间都是种浪费。


运行qemu,启动调试模式:

# qemu –S–kernel arch/x86/boot/bzImage –had ubuntu9.10_32.img –append “root=dev/had”


在命令中使用S参数,是freeze CPU ata startup。

系统跳出一个黑显示界面,无任何内容,此时通过ctrl+alt+1与ctrl+alt+2可以切换,ctrl+alt+2是qemu控制台,ctrl+alt+1是屏幕输出。

现在我切换到qemu控制台(ctrl+alt+2)

(qemu)gdbserver 1234


此时需要另打开一个终端,进入linux2.6.30源码目录下:

# gdbvmlinux

(gdb)target remote localhost:1234


这时就可以正常使用gdb编译内核了

设置断点break start_kernel,停在linux内核的第一个c程序之上:










版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【zz】使用Bochs和GDB对内核进行源代码级调试
使用Bochs和GDB对内核进行源代码级调试 Written by YY    Wednesday, 21 April 2010 12:49 http://osfromscratch.
1149 0
一文教你玩转Linux的ping命令,从此成为Linux网络高手
一文教你玩转Linux的ping命令,从此成为Linux网络高手
5 0
Linux tail命令该如何使用?这篇文章讲的十分详细!
Linux tail命令该如何使用?这篇文章讲的十分详细!
16 0
Linux中最基本的命令ls的用法有哪些?
Linux中最基本的命令ls的用法有哪些?
8 0
Linux命令小技巧:显示文件指定行的内容
Linux命令小技巧:显示文件指定行的内容
37 0
Java执行Linux命令
Java执行Linux命令
20 0
如何在Linux中优雅的使用 head 命令,用来看日志简直溜的不行
如何在Linux中优雅的使用 head 命令,用来看日志简直溜的不行
42 0
[linux] losetup 命令
[linux] losetup 命令
43 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Graph图数据库基础介绍及场景
立即下载
NebulaGraph图数据库在计算巢试用中心的最佳实践
立即下载
Decian GNU/Linux安全合规之路
立即下载