各种原因之下,我糊里糊涂的进了system的实验室,所以也只能硬着头皮从零开始学起。最近手头的项目需要深入System Kernel进行修改,所以首要的任务就是读懂Kernel的Source Code。无奈我真的是缺少太多的相关Background,所以在看了一周的代码之后进展甚微。在实验室里百般的求助之后,我决定尝试debug the kernel when booting。所以我需要学习如何在我的Ubuntu系统下使用Qemu + gdb来Debug Kernel。在此记录遇到的相关问题,以备将来参考。
安装Qemu:
参考了网上的众多资料之后,菜鸟的我还是决定用 sudo apt-get install qemu这个我认为最简单的方法来安装Qemu。安装过程倒是挺顺利的,可是安装之后系统却显示没有qemu命令:
cici@ubuntu:/usr/bin$ qemu No command 'qemu' found, did you mean: Command 'qtemu' from package 'qtemu' (universe) Command 'aqemu' from package 'aqemu' (universe) qemu: command not found
在查看bin文件夹的内容之后, 才发现里面只有
cici@ubuntu:/usr/bin$ qemu qemu-x86_64 qemu-ifdown qemu-nbd qemu-io qemu-ifup qemu-system-i386 qemu-ga qemu-img qemu-system-x86_64 qemu-i386
据我理解,其中的qemu-system-i386对应的是32 bits,而qemu-system-86_64对应的是64 bits。所以原本的qemu命令就被这二者取代了。为了方便使用,可以用ln命令建立两个软链接:
sudo ln -s /usr/bin/qemu-system-i386 /usr/bin/qemu32 sudo ln -s /usr/bin/qemu-system-x86_64 /usr/bin/qemu64
但是其他有关qemu的命令各自是什么意思呢?上网查了一下,结论是:
qemu-i386,qemu-x86_64,qemu-system-i386,qemu-system-x86_64都是启动虚拟机的命令,区别在于前两个仅仅模拟CPU,后两个则是用于模拟整个PC。
qemu-img命令则是用于管理虚拟机磁盘镜像的。值得注意的是,创建磁盘映像相当于给一台电脑加上一个硬盘,如果里面没有内容的话,启动这个虚拟机是找不到可引导设备的。所以我觉得qemu环境可以理解为一台虚拟的电脑,上面可以存很多的操作系统镜像文件,用不同的文件可以启动不同的Guest OS。
另外,所有的命令对应的都是一个二进制文件,也就是相应代码编译后的可执行文件。