CentoOS 6.5 Eclipse+Qemu搭建linux内核源码级调试环境

搭建环境:

ContoOS 6.5

Eclipse eclipse-cpp-luna-R-linux-gtk.tar.gz

qemu qemu-0.15.0

1》qemu的安装 官网地址:http://wiki.qemu.org

这里以32位的CentoOS位列,其他安装方式可以查看博文 http://blog.csdn.net/sunlight664/article/details/8565291

    #32位系统centos6.xwgethttp://pkgs.repoforge.org/qemu/qemu-0.15.0-1.el6.rfx.i686.rpmwgethttp://pkgs.repoforge.org/qemu/qemu-img-0.15.0-1.el6.rfx.i686.rpmrpm-ivhqemu-0.15.0-1.el6.rfx.i686.rpmrpm-ivhqemu-img-0.15.0-1.el6.rfx.i686.rpm

2》下载linux-0.2.img.bz2 http://wiki.qemu.org/Testing

inux-0.2.img.bz2 (8 MB)Small Linux disk image containing a 2.6.20 Linux kernel, X11 and various utiliti

解压linux-0.2.img.bz2 得到一个linux-0.2.img文件,做备用

3》下载linux内核源码 这部分参考 http://blog.csdn.net/ustc_dylan/article/details/5991490

1.首先我们要从www.kernel.org下载内核源码,在这里我选择的是 linux-2.6.32.tar.bz2。我将其下载到我的主目录下,然后在terminal下输入以下命令。

$ cd (回到主目录)

$ tar xf linux-2.6.32.tar.bz2 (解压源码)

$ mkdir linux-2.6.32-obj (创建一个编译内核的目标文件输出目录)

$ cd linux-2.6.32 (进入内核源码树根目录)

$cp /boot/config-2.6.32-431.20.3.el6.i686 ./.config (这是拷贝原有系统的配置文件到 linux-2.6.32目录下,并命名为.config文件,缺少这一步可能提示缺少.config的错误提示)

$ make O=~/linux-2.6.32-obj menuconfig (这里我们要配置内核,并在~/linux-2.6.32-obj目录下生成内核配置文件.config)

$ make mrproper

4》安装Eclipse相关插件 这部分参考 http://x-slam.com/da_jian_eclipse_qemu_gdb_diao_shi_linux_kernel_huan_jing

安装Eclipse插件CDT 运行Eclipse,点击菜单“Help”->“Install New Software…”,在弹出的对话框里点击“Work with:”后面的下拉按钮,选择“Kepler – http://download.eclipse.org/releases/kepler”(不同的Eclipse版本选择不一样,与自己下载的版本一致一即可),然后在下面的选择框中将“Programming Languages”的“C/C++ Autotools support”和“C/C++ Visual C++ Support”这两项(对应http://download.eclipse.org/releases/juno包里的CDT)以及“C/C++ Development Tools”和“C/C++ Development Tools SDK”选中,接下来点击“Next >”按钮两次和“Finish”一次(共显示3个页面),注意其间要选中接收条款,剩下就是自动连网下载安装选中的软件包,安装好后自动重启Eclipse即可

除了上面与C/C++相关的工具,还需要安装与Linux相关的GDB,将“Linux Tools”里的“GDB Tracepoint Analysis”和“Mobile and Device Development”里的“C/C++ GDB Hardware Debugging”选中安装上,方法同上。

注:上面装的工具有些过多,可自行删减,这里是满足更多需求,将相关的全安装上了。同时,有些没找到,这说明已经装了。

5》配置联调环境

在上面的工具安装好后,接下来就是要配置联调环境了,首先先把QEMU运行起来,执行如下命令:

qemu-system-i386 -s -S -hda /home/tangzhihua/linux-0.2.img -kernel /home/tangzhihua/linux-2.6.20-obj/arch/i386/boot/bzImage -append root=/dev/sda

命令解释

-s 选项表示我们运行虚拟机时将1234端口开启成调试端口,供eclipse网络调试时使用

-S 选项表示我们启动虚拟机时要“冻住”虚拟机,等待调试器发出继续运行的命令。

-hda ~/linux-0.2.img 表示我们要运行时的硬盘 (前文一下载)

-kernel /home/xxx/linux-2.6.20-obj/arch/i386/boot/bzImage 表示我们要调试的内核镜像

-append root=/dev/sda 表示我们要传递给内核的参数(这个系统的硬盘有关,你可一通过fdisk -l 查看,是hda的还是sda的)

启动后,你会看到屏幕黑黑的啥也没有。因为我们指定了-S参数把虚拟机给“冻”住了。

就这样先执行着,不进行跟QEMU相关的其他操作,QEMU一直处于黑屏状态(Pause状态),等待远程GDB的一个c,接下来配置Eclipse环境:

点击菜单“Window”->“Preferences”,在弹出的对话框中,点击左边的“General”->“Workspace”,将右边的“Build automatically”复选框不选中。再点击对话框左边的“C/C++”->“Indexer”,将右边的“Enable indexer”和“Automatically update the index”两复选框不选中。

6》创建新工程 这部分参考 http://x-slam.com/da_jian_eclipse_qemu_gdb_diao_shi_linux_kernel_huan_jing

a.接下来创建一个工程。这小部分可参考 http://blog.csdn.net/ustc_dylan/article/details/5991490

1)点击菜单“File”->“New”->“Project…”,在弹出的对话框中选择“C/C++”->“C Project”,再点击“Next >”按钮,出现的对话框配置如下:

其中,“Project name:”为工程名,可自定义;而“Location:”则为工程文件所在路径,此处设置为Linux Kernel源码目录,而“Project type:”则设置为“Makefile project”/“Empty Project”,“Toolchains:”则设置为“Linux GCC”。

2) 然后单击Next按钮,出现下一个对话框。这时候因为工程的默认配置还不完全符合我们的要求。所以我们单击 Advanced Settings 按钮会打开一个工程配置对话框。我们选择左侧的 C/C++ Build 选项,在相应的右侧页面里我们将Builder Settings 选项页下的 Use default build command 勾选掉,然后指定一个新的Build command 为 make O=/home/xxx/linux-2.6.28-obj.然后单击Build location中的File system…按钮更改obj文件的输出目录为/home/xxx/linux-2.6.28-obj.

3) 然后单击Behaviour选项页,将下面的clean更改为mrproper(这是默认清除内核obj文件的命令目标)。

注意,这与参考的有点不同哦,(将build(Incremental Build)中的all更改为一个空格)会有些问题。提示设置为all。

这个时候你就可以编译内核了。Ctrl + B 开始编译内核。编译完内核。在/home/xxx/linux-2.6.32-obj/arch/x86/boot/下将生成一个bzImage的大内核镜像。

b.接下来进行DEBUG配置,在“Project Explorer”里右击刚创建的“Linux_Kernel_3.13.6”项目,在右键菜单中点击“Debug As”->“Debug Configurations…”,在弹出的对话框中双击“C/C++ Remote Application”,配置如下

将“C/C++ Application:”栏设置为Linux Kernel源码编译出来的vmlinux文件所在路径(包含文件名),然后将“Disable auto build”选上,

c. 切换到“Debugger”页,修改配置如下

将“Stop on startup at”设置为start_kernel(Linux Kernel的入口函数),将“Port number:”设置为之前QEMU运行时的默认端口号1234,“Apply”后再点击上图中的“Debug”按钮开始调试,此时会切换到调试界面。

注意:这一步中在Debugger Options中可能没有connectiont选项。只有Gdbserver Settings选项,因为默认是GDB(DSF)Automatic Remote Debugging Launcher

请点击Debugger Options下面的Select other链接。勾选Use configuration specific set选项。然后在Launchers中选

GDB(DSF)Manual Remote Debugging Launcher 选项。然后ok返回。重新进入Debugger页。在Debugger Options中将有connectiont选项。

进入调试界面后,查看QEMU,不再是黑屏,说明环境已搭建好。

参考博文:

http://blog.csdn.net/sunlight664/article/details/8565291

http://x-slam.com/da_jian_eclipse_qemu_gdb_diao_shi_linux_kernel_huan_jing

http://blog.csdn.net/ustc_dylan/article/details/5991490

每当我看天的时候我就不喜欢再说话,每当我说话的时候我却敢看天。

CentoOS 6.5 Eclipse+Qemu搭建linux内核源码级调试环境

相关文章:

你感兴趣的文章:

标签云: