继续学习Linux.
今天要做是的搭建Linux的内核调试环境。
环境:Ubuntu13.04 gcc4.7.3
QEMU简介
QEMU是一套由Fabrice Bellard所编写的以GPL许可证分发源码的模拟处理器,在GNU/Linux平台上使用广泛。Bochs,PearPC等与其类似,但不具备其许多特性,比如高速度及跨平台的特性,通过KQMEU这个开源的加速器,QEMU能模拟至接近真实电脑的速度。
最简单的方法就Ubuntu的软件中心安装:
找不到的话可以尝试更新源,然后update。
其他发行版的linux可以从源码进行安装 - http://wiki.qemu.org/Main_Page。
之前有一篇文章介绍内核编译的,可以参考-Linux操作系统分析(4)- 更新内核与添加系统调用
这里需要重新编译一下,添加调试信息。
首先下载最新版本的内核
https://www.kernel.org/pub/linux/kernel/v3.x/
下载linux-3.9.tar.gz
解压后终端进入文件夹,执行:
make menuconfig
在Kernel hacking项目里面将Compile the kernel with debug info和Compile the kernel with frame pointers,两项勾选。这些项目可以让编译时添加调试信息,类似我们平时用的-g选项。
接着执行:
make -j2 bzImage
去http://wiki.qemu.org/Testing下载linux-0.2.img.bz2,解压后丢到linux源码的目录下。
终端执行:
qemu -S -kernel arch/i386/boot/bzImage -hda linux-0.2.img -append "root=dev/hda"
# -kernel 用来指定内核,注arch/x86/bzImage是不带调试信息的内核,vmlinux是带有调试信息的内核.
#-hda 指定IDE硬盘
#-append cmdline use 'cmdline' as kernel command line
之后弹出一个小黑窗口,qemu就算起来了。
ctrl+alt+1 与 ctrl+alt+2可以切换界面,前者是屏幕输出,后者是qemu控制台
运行起来后是黑屏,我们要切换到控制台,用鼠标点击窗口,然后ctrl+alt+2,
在QEMU的命令行中 运行:
gdbserver tcp::1234
启动gdbserver,并在tcp的1234端口监听,-S表示在开始的时候冻结CPU直到远程的gdb输入相应的控制命令
新起一个终端,用gdb调试vmlinux.
gdb vmlinux
target remote localhost:1234