Eclipse CDT调试linux内核

时间:2023-01-24 22:00:50
    在Linux操作系统上,一般以C/C++开发为主。使用这个平台,主要都是针对C/C++开发。传统在 Linux下开发程序,是在文字模式下,利用vi或者vim等文字编辑器编辑C/C++程序,保存之后,在命令行中使用gcc进行相应的编译操作。如果想要调试程序,一般会用gdb来调试,但也都是在终端命令行环境下进行操作的。
但是,这种开发和调试的环境,对熟悉使用IDE开发的人会又很大的不便;对一些不熟悉Linux环境的开发人员工作更是较为困难的;还有,这种开发和调试的方式,相对来说,生产力不是很高的。如果只是开发和调试学习用的小程序的影响不会很大。但若要开发大型项目时,程序个数众多,运行操作起来相对来说,会不如又图形界面的环境舒服一些。例如,debug时breakpoint的加入,单步执行,观察变量变化等,都不如又可视化环境的条件好;等等;所以,我们很自然的就会想到在Linux环境下,使用IDE来完成开发和调试的工作。
环境搭建:
我的操作系统是Ubuntu9.10。
用到的软件主要有:JRE(Java Runtime Environment),Eclipse SDK,CDT。
具体的安装步骤如下:
1.安装JRE:
我使用的是jre-6u21-linux-i586.bin。在超级用户模式下,创建目录/usr/local/java,拷贝jre-6u21-linux-i586.bin到该目录下,付给起可执行权限chmod a+x jre-6u21-linux-i586.bin,接着执行就可以了。最后,在修改环境变量,添加到PATH中就可以了。
Eclipse CDT调试linux内核 

Eclipse CDT调试linux内核
使用java -version检查是否安装成功。
Eclipse CDT调试linux内核
2.安装Eclipse SDK和CDT:
我使用的是eclipse-linuxtools-helios-incubation-linux-gtk.tar.gz。原来要分别安装Eclipse SDK和CDT,但是发现网上已经提供了集成CDT的IDE环境安装文件了。在/usr/local/下,解压eclipse-linuxtools-helios-incubation-linux-gtk.tar.gz,就可以看见Eclipse文件了。进入该目录,执行./eclipse就可以了。

Eclipse CDT调试linux内核
接下来,就主要是在Eclipse集成环境中,调试Linux内核了。当然,必须要事先下载还内核的源码包,并且要选择好配置选项。我的内核是linux-2.6.28。注意,在配置内核的时候,要选择kernel hacking 配置菜单下的“Compile the kernel with debug info”。
内核调试步骤:
首先我们到Window->Preferences->General->Workspace 中将Build Automatically选项去掉。
然后到Window->Preferences->C/C++ -> Indexer中,将默认的Fast c/c++ indexer改为No indexer。
然后我们开始创建一个新的工程。从菜单中选择File -> New ->C/C++ -> C Project 然后单击Next按钮。
在Project Name 一栏填入一个工程名,比如 linux-kernel. 然后将 Use default location 选项给勾掉。
在Location一栏填入刚才解压的内核源码的路径。Project type选择Makefile project -> Empty project。Toolchains 选择 Linux GCC.
然后单击Next按钮,出现下一个对话框。单击 Advanced Settings 按钮会打开一个工程配置对话框。选择 C/C++ Build 选项,在相应的Builder Settings 选项页下的 Use default build command 勾选掉,然后指定一个新的Build command 为 make O=/home/zz/kernel/linux-2.6.28.然后单击Build location中的File system…按钮更改obj文件的输出目录为/home/zz/kernel/linux-2.6.28。当然,这个要根据自己的实际目录情况才行。然后单击Behaviour选项页,将build(Incremental Build)中的all更改为一个空格,将下面的clean更改为mrproper。
还有,值得注意的是,我的目标是为ARM开发板编译内核,所以在所有的调试和编译的选项中,都需要将gcc改为arm-linux-gcc,将gdb改为arm-linux-gdb。(事先应该修改Makefile文件,来指定使用的编译器比较方便。)事先,应该确保已经成功安装了交叉编译工具和调试工具才行。
这个时候你就可以编译内核了。Ctrl +B 键开始编译工程。
编译内核成功之后,就需要修改debug config的选项了。在菜单中选择Run -> Debug Configurations ,这时候打开一个配置页面。然后我们在C/C++ Application上双击鼠标,这时在右侧的页面弹出了debug配置选项,然后我们在project一栏选择 linux-kernel。根据自己的arm-linux-gdb的实际情况,然后单击Debugger选项页,将Debugger改为 GdbServer Debugger . 将Stop on startup at 改为start_kernel,将Connection子选项页下的Type改为TCP将Port number改为2331(我的GDB环境要求的)。
重要的debugger配置如图:

Eclipse CDT调试linux内核
这里用到的.gdbinit因该是自己事先已经写好的了,选择具体的路径就可以了。
最后单击Dubug按钮就可以了。如图:

Eclipse CDT调试linux内核

Eclipse CDT调试linux内核
至于一些调试的技巧,如查看变量,寄存器内容,断点设置等的操作,与Eclipse的基本使用是大致相同的。
以后就可以用Eclipse环境结合仿真器来调试内核。