Qemu+gdb跟踪内核源码
2024-10-12 08:02:46
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.
./configure --atrget-list=i386-softmmu
make
make 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..tar.bz2
tar xvf linux-3.18..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::
在编译内核的源码根目录下启动gdb
gdb vmlinux
在gdb命令行下执行远程调试命令,给内核start_kernel打个断点,就可以进入start_kernel函数了
target remote localhost:1234
b start_kernel
continue
最新文章
- IRequiresSessionState接口控制
- HTML3
- 难道只有我一个人想吐槽npm这种包管理方式么
- Android 在 manifest 文件里增加 versionCode,运行后版本并没有随之增加
- work flow
- 骨牌铺方格[HDU2046]
- Struts2 - 常用的constant总结
- 山东理工大学ACM平台题答案关于C语言 1137 C/C++经典程序训练7---求某个范围内的所有素数
- Web前端/后端
- sqlserver触发器如何将一个库中的数据插入到另外一个库中
- Flarum轻量级论坛的安装
- 2018-2019-2 20165232《网络对抗技术》Exp1 缓冲区溢出实验
- 开发者必备的 12 个 JavaScript 库
- poj 2942 Knights of the Round Table - Tarjan
- POJ - 2421 Constructing Roads 【最小生成树Kruscal】
- python+requests接口自动化测试框架实例详解教程
- 3.1 Makefile
- 《机器学习实战》AdaBoost算法(手稿+代码)
- iOS非ARC内存管理摘要 - 实践型
- struct in_addr 结构体