一 linux内核源码阅读工具
下面是linux环境下eclipse的配置安装方案:
qemu进行linux内核源码的编译和调试,这次终于抽了个时间尝试一下,毕竟eclipse的debugger是非常强大的。
1.首先我们要从www.kernel.org下载内核源码,在这里我选择的是 linux-2.6.32.tar.bz2。我将其下载到我的主目录下,然后在terminal下输入以下命令。
2. 接下来我们打开elicpse,第一次打开时有一个欢迎画面,
我们单击右边的workbench图片关掉欢迎画面。由于eclipse cdt是一个非常强大的c/c++ ide,它默认会自动的解析工程中源程序并编译工程和产生智能提示信息。但由于我们调试内核过程中暂不会用到这些功能,所以要关闭他们。
然后我们开始创建一个新的工程。
然后单击Next按钮,出现下一个对话框。这时候因为工程的默认配置还不完全符合我们的要求。所以我们单击 Advanced Settings 按钮会打开一个工程配置对话框。我们选择左侧的 C/C++ Build 选项,在相应的右侧页面里我们将Builder Settings 选项页下的 Use default build command 勾选掉,然后指定一个新的Build command 为
然后单击Behaviour选项页,将build(Incremental Build)中的all更改为一个空格,将下面的clean更改为mrproper(这是默认清除内核obj文件的命令目标)。弄好后如下图所示:
这个时候你就可以编译内核了。Ctrl + B 开始编译内核。
此时我们在xterm下运行qemu虚拟机,命令行如下:
我解释一下这个命令行上的参数。
-s 选项表示我们运行虚拟机时将1234端口开启成调试端口,供eclipse网络调试时使用
-S 选项表示我们启动虚拟机时要“冻住”虚拟机,等待调试器发出继续运行的命令。
-append root=/dev/hda 表示我们要传递给内核的参数(这里你可能感觉有点奇怪为啥是/dev/hda而不是/dev/hda1或是/dev/hda2呢?因为这个镜像仅仅是一个分区的二进制镜像,不是整个硬盘的镜像)
启动后,你会看到屏幕黑黑的啥也没有。因为我们指定了-S参数把虚拟机给“冻”住了。
然后单击Debug按钮开始调试!这时候Eclipse会提示我们切换 Perspective ,选择是,不再提示。
这时候就开始调试内核,而且是源码级的调试!如下图:
一直在Linux下开发,苦于没有IDE,一般都是自己编写Makefile,然后在windows下用文本编辑器ftp打开文件编辑,然后在linux下完成编译。调试代码也只能是命令行用gdb进行调试,相当痛苦。
以上是按照在Linux上面的,也就是开发机器上面。
上面是安装在Windows上面的。
这种方法很简单,非常适合在Linux下开发的同学们,特别是在公司基本上是用Linux的同学,这时候一般开发机器都是服务器,性能也够好,跑个eclipse也不慢。自己试验下来还是相当方便的。至于怎么安装,可以先查查Xming的使用,安装方法网上都能找得到,就不再详述了。我能安装成功,你也能,呵呵~
一 linux内核源码阅读工具
qemu进行linux内核源码的编译和调试,这次终于抽了个时间尝试一下,毕竟eclipse的debugger是非常强大的。
1.首先我们要从www.kernel.org下载内核源码,在这里我选择的是 linux-2.6.32.tar.bz2。我将其下载到我的主目录下,然后在terminal下输入以下命令。
2. 接下来我们打开elicpse,第一次打开时有一个欢迎画面,
我们单击右边的workbench图片关掉欢迎画面。由于eclipse cdt是一个非常强大的c/c++ ide,它默认会自动的解析工程中源程序并编译工程和产生智能提示信息。但由于我们调试内核过程中暂不会用到这些功能,所以要关闭他们。
然后我们开始创建一个新的工程。
GCC.最终结果如下图所示:
然后单击Next按钮,出现下一个对话框。这时候因为工程的默认配置还不完全符合我们的要求。所以我们单击 Advanced Settings 按钮会打开一个工程配置对话框。我们选择左侧的 C/C++ Build 选项,在相应的右侧页面里我们将Builder Settings 选项页下的 Use default build command 勾选掉,然后指定一个新的Build
然后单击Behaviour选项页,将build(Incremental Build)中的all更改为一个空格,将下面的clean更改为mrproper(这是默认清除内核obj文件的命令目标)。弄好后如下图所示:
这个时候你就可以编译内核了。Ctrl + B 开始编译内核。
此时我们在xterm下运行qemu虚拟机,命令行如下:
我解释一下这个命令行上的参数。
-s 选项表示我们运行虚拟机时将1234端口开启成调试端口,供eclipse网络调试时使用
-S 选项表示我们启动虚拟机时要“冻住”虚拟机,等待调试器发出继续运行的命令。
-append root=/dev/hda 表示我们要传递给内核的参数(这里你可能感觉有点奇怪为啥是/dev/hda而不是/dev/hda1或是/dev/hda2呢?因为这个镜像仅仅是一个分区的二进制镜像,不是整个硬盘的镜像)
启动后,你会看到屏幕黑黑的啥也没有。因为我们指定了-S参数把虚拟机给“冻”住了。
这时候就开始调试内核,而且是源码级的调试!如下图:
总结: 对于机器配置比较差的同学这种搭配可能比较郁闷,每次调试的时间太长了。而且还有个问题就是每次调试都要进行编译,不知道有没有选项可以禁止调试时候的自动编译,希望了解的大侠通知下小弟。
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。