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

最新文章

  1. IRequiresSessionState接口控制
  2. HTML3
  3. 难道只有我一个人想吐槽npm这种包管理方式么
  4. Android 在 manifest 文件里增加 versionCode,运行后版本并没有随之增加
  5. work flow
  6. 骨牌铺方格[HDU2046]
  7. Struts2 - 常用的constant总结
  8. 山东理工大学ACM平台题答案关于C语言 1137 C/C++经典程序训练7---求某个范围内的所有素数
  9. Web前端/后端
  10. sqlserver触发器如何将一个库中的数据插入到另外一个库中
  11. Flarum轻量级论坛的安装
  12. 2018-2019-2 20165232《网络对抗技术》Exp1 缓冲区溢出实验
  13. 开发者必备的 12 个 JavaScript 库
  14. poj 2942 Knights of the Round Table - Tarjan
  15. POJ - 2421 Constructing Roads 【最小生成树Kruscal】
  16. python+requests接口自动化测试框架实例详解教程
  17. 3.1 Makefile
  18. 《机器学习实战》AdaBoost算法(手稿+代码)
  19. iOS非ARC内存管理摘要 - 实践型
  20. struct in_addr 结构体

热门文章

  1. text-overflow:ellipsis实现超出隐藏时省略号显示
  2. linux下shell统计文件目录下所有代码行数
  3. Longest Consecutive Sequence [LeetCode]
  4. 数据类型转换的三种方式 Convert,parse和TryParse的解析
  5. Play framework logging设置
  6. 一个QMLListView的例子--
  7. [Js]面向对象的拖拽
  8. P142-1
  9. Oracle 过程控制语句整理
  10. libpcap文件格式分析