首页 > 代码库 > Qemu+gdb跟踪内核源码

Qemu+gdb跟踪内核源码

1.编译安装Qemu

Qemu源码下载地址:http://wiki.qemu.org/Download

linux下可以直接用wget下载:

wget http://wiki.qemu.org/download/qemu-2.2.0.tar.bz

解压缩bz2文件:

tar -jxvf qemu-2.2.0.tar.bz

由于我只有模拟x86的需求,所以在编译之前先配置Qemu:

cd qemu-2.2.2./configure --atrget-list=i386-softmmumakemake install

编译安装完之后,可以从http://wiki.qemu.org/Testing下载一个镜像测试一下,我这里下载linux-0.2.img.bz2解压之后用qemu运行:

qemu-system-i386 -hda linux-0.2.img

技术分享

到这里Qemu就编译安装好了。

2.编译Linux Kernel

kernel下载地址:https://www.kernel.org/pub/linux/kernel/

直接用wget下载最新的3.18.5

wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.18.5.tar.bz2

解压缩bz2文件:

zx -d linux-3.18.5.tar.bz2tar xvf linux-3.18.5.tar

编译内核生成bzImage文件,由于我需要用gdb调试内核,所以这里配置时需要打开debug info

make menuconfig

在kernel hacking中选择compile the kernel with debug info

make bzImage

这里内核没有做裁剪,编译时间很长,后续调试可以参考http://www.jinbuguo.com/kernel/longterm-3_10-options.html进行裁剪编译。

3.用Qemu+gdb调试内核

首先将编译出的bzImage和之前下载的linux-0.2.img放在一个目录,然后启动Qemu:

qemu-system-i386 -S -kernel bzImage -hda linux-0.2.img -append "root=/dev/hda" -monitor stdio
-monitor stdio的意思是将qemu的控制台转移到终端内
在qemu命令行下启动gdbserver
gdbserver tcp::1234

在编译内核的源码根目录下启动gdb

gdb vmlinux

在gdb命令行下执行远程调试命令,给内核start_kernel打个断点,就可以进入start_kernel函数了

target remote localhost:1234
b start_kernel
continue

技术分享

Qemu+gdb跟踪内核源码