China Open source community
站内导航:
 
 
 
当前位置: 首页 >> 开源操作系统 >> 使用Qemu调试linux内核
 
 

使用Qemu调试linux内核

作者:      来源:http://blog.csdn.net/sylin     发表时间:2007-03-29     浏览次数:      字号:    

Qemu是一个优秀的开源ISA模拟器,支持很多体系结构,当然包括x86。Qemu提供调试功能,可以对被模拟进行调试。

Qemu主页http://fabrice.bellard.free.fr/qemu/

Qemu下载页面http://fabrice.bellard.free.fr/qemu/download.html 包括源码,可执行文件,已制作好的disk file等

Qemu有使用说明文档http://fabrice.bellard.free.fr/qemu/qemu-doc.html,网上也可以搜索到一些说明,但是这些说明不够清楚甚至有错误的地方,不足以帮助别人成功使用Qemu来调试kernel,所以我把自身可行的方法记录下来。

1。下载Qemu, qemu有直接的可执行文件包,解压到  / 即可使用

2。下载Qemu 提供的测试disk image file;

3。测试Qemu是否可以运行, qemu -hda linux-0.2.img -append "root=/dev/hda"
 -no-kqemu(linux-0.2.img为之前下载好的disk image file),正常情况下会跳出窗口开始运行linux系统

基本安装正确之后,开始进入调试阶段

1。编译自己需要的kernel内核,产生image文件bzImage,kernel elf文件vmlinuz

2。运行Qemu,启动调试模式。这里是需要注意的地方,Qemu给出的说明是这样的:

In order to use gdb, launch qemu with the '-s' option. It will wait for a gdb connection:

> qemu -s -kernel arch/i386/boot/bzImage -hda root-2.4.20.img \       -append "root=/dev/hda"Connected to host network interface: tun0Waiting gdb connection on port 1234

很多网上资料也是这么说的,但是我试了多次,使用这样的命令,不会出现“Connected to host network interface: tun0 Waiting gdb connection on port 1234”字样,linux系统也是直接运行起来,没有调试的机会。一个个们告诉我用-S(大S)就能达到效果。 -S 的意思是freeze CPU ata startup。

步骤如下

1。启动Qemu,使用大S参数 qemu -kernel bzImage -hda linux-0.2.img -append "root=/dev/hda" -S,系统会跳出一个黑显示界面,无任何内容。此时通过 ctrl+alt+1 与 ctrl+alt+2可以切换,一个是屏幕输出,一个是qemu控制台。

2。切换到qemu控制台,输入命令gdbserver 1234

3。同时打开gdb程序,通过qemu说明中提供的方法既可进行调试:

Then launch gdb on the 'vmlinux' executable:

> gdb vmlinux

In gdb, connect to QEMU:

(gdb) target remote localhost:1234你可以设置断点如break start_kernel,停在linux内核的第一个c程序之上。

编辑 webmaster

 
 
 
评论
 
 
发表
 
姓名: QQ:
性别: MSN:
E-mail: 主页:
评分: 1 2 3 4 5
评论内容:
验证码:
  
  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
  • 用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。
  •  
    中国源码网 - WWW.YUANMA.ORG - 中国开放源代码社区