Chinaunix首页 | 论坛 | 博客
  • 博客访问: 487763
  • 博文数量: 115
  • 博客积分: 5016
  • 博客等级: 大校
  • 技术积分: 1401
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-21 16:03
文章分类

全部博文(115)

文章存档

2013年(1)

2010年(17)

2009年(76)

2008年(21)

我的朋友

分类: LINUX

2010-05-09 21:33:41

                                                                     2010.5.9
最近这一周一直在忙着调试内核,应该说是寻找内核调试的办法,以前的时候一直使用Kgdb,但是kgdb的官方版本只更新到2.6.15,内核源代码又是在2.6.25之后才集成了kgdb,而我呢,为了基于litmus做调度分析,只能使用2.6.20版本,就这样处在一个真空的阶段,没有办法使用kgdb这个我觉得比较好用而且熟悉的工具!
而后,进行各种探索,各种查资料,首先是被称为最新内核调试工具的systemtap,安装,使用,唉,太晦涩了,生硬的脚本语言也就忍了,我对调度器进行调试要频繁处理死机情况,可是这种情况下,systemtap也死了……无奈,或许是我不会用吧,最终还是决定放弃了!然后是耳熟能详的kdb,又是查阿查,居然没有找到2.6.20对应的版本,而且网上那个可恶的ftp下载资源的网页我就没有打开过……再次以失败告终!
然后,一个偶然,看到了一篇文章,是albcamus发表在CU上的,通过VMWare Workstation 6.0调试Linux Kernel于是我兴致勃勃的安装了vmware,考虑到6.0可以这么做,估计7.0也可以,于是直接在官网上下载了7.0(那是一个漫长的历史过程,足足下了8个小时),安装还算顺利,这是最让我欣慰的地方,然后我安装了自己的系统,编译内核,然后用albcamus提到的方法去做,但是每次target remote localhost:8832之后都是还没开始调试就提示调试端口关闭,faint,于是我就各种查,查,查……未果!!
万般无奈之下,我下载了vmware6.0,又是漫长的7个小时,然后卸载了7.0去安装6.0,这一次,我遇到了我从使用linux以来最为头痛的一次软件安装问题,和内核头文件之间的矛盾,我隐约觉得这应该是内核版本比较高导致的问题,但是我真的不知道该如何去解决:问题如下:
Using 2.6.x kernel build system.
make: Entering directory `
/tmp/vmware-config2/vmmon-only'
make 
-/lib/modules/2.6.26/build/include/.. SUBDIRS=$PWD SRCROOT=$PWD/. modules
make[
1]: Entering directory `/usr/src/kernels/2.6.24.4-64.fc8-i686'
CC [M] 
/tmp/vmware-config2/vmmon-only/linux/driver.o
CC [M] 
/tmp/vmware-config2/vmmon-only/linux/hostif.o
CC [M] 
/tmp/vmware-config2/vmmon-only/common/comport.o
CC [M] 
/tmp/vmware-config2/vmmon-only/common/cpuid.o
In file included from include
/asm/bitops.h:2,
                 from 
/tmp/vmware-config2/vmmon-only/./include/vcpuset.h:74,
                 from 
/tmp/vmware-config2/vmmon-only/./include/modulecall.h:23,
                 from 
/tmp/vmware-config2/vmmon-only/common/vmx86.h:18,
                 from 
/tmp/vmware-config2/vmmon-only/common/hostif.h:18,
                 from 
/tmp/vmware-config2/vmmon-only/common/cpuid.c:14:
include
/asm/bitops_32.h:9:2: error: #error only <linux/bitops.h> can be included directly
make[
2]: *** [/tmp/vmware-config2/vmmon-only/common/cpuid.o] Error 1
make[
1]: *** [_module_/tmp/vmware-config2/vmmon-only] Error 2
make[
1]: Leaving directory `/usr/src/kernels/2.6.26/include'
make: 
*** [vmmon.ko] Error 2
make: Leaving directory `
/tmp/vmware-config2/vmmon-only'
Unable to build the vmmon module.

For more information on how to troubleshoot module
-related problems, please
visit our Web site at 
"" and
"".
我继续查,在上找到了相关的问题,按照中petr的说法我下载了相关的补丁,然后进行了update,结果还是不行,这一次的问题如下:
Unknown VMware Workstation 6.0.4 build 93057 detected. Building for Workstation 6.0.0.
Using 2.6.x kernel build system.
make: Entering directory `/tmp/vmware-config20/vmmon-only'
make -C /lib/modules/2.6.26.3-default/build/include/.. SUBDIRS=$PWD SRCROOT=$PWD/. modules
make[1]: Entering directory `/usr/src/packages/BUILD/kernel-2.6.26.3default'
CC [M] /tmp/vmware-config20/vmmon-only/linux/driver.o
/tmp/vmware-config20/vmmon-only/linux/driver.c:171: error: unknown field ‘nopage’ specified in initializer
/tmp/vmware-config20/vmmon-only/linux/driver.c:172: warning: initialization from incompatible pointer type
/tmp/vmware-config20/vmmon-only/linux/driver.c:175: error: unknown field ‘nopage’ specified in initializer
/tmp/vmware-config20/vmmon-only/linux/driver.c:176: warning: initialization from incompatible pointer type
make[2]: *** [/tmp/vmware-config20/vmmon-only/linux/driver.o] Error 1
make[1]: *** [_module_/tmp/vmware-config20/vmmon-only] Error 2
make[1]: Leaving directory `/usr/src/packages/BUILD/kernel-2.6.26.3default'
make: *** [vmmon.ko] Error 2
make: Leaving directory `/tmp/vmware-config20/vmmon-only'
Unable to build the vmmon module.


For more information on how to troubleshoot module-related problems, please
visit our Web site at "" and
"".
Execution aborted.

然后我继续查,终于在
-vmmon-module-while-installing-vmware.html中查到了相关的问题,继续按照
给出的建议去http://www.insecure.ws/2008/10/20/vmware-specific-specific-55x-and-kernel-2627下载相关的补丁,
尽管我是26的内核,但还是用了,我想,所谓病急乱投医就是这样的吧,然后又出现了新的问题:
gcc: error trying to exec 'cc1plus': execvp: No such file or directory
error: command 'gcc' failed with exit status 1
查了一下很多人都说是没有安装个g++的缘故,我看了一下,已经安装了阿,不知道是为什么看不到,忽然想到,
在编译vmware6.0时我用的是gcc-4.1而不是我系统中带的4.3,查看了一下给g++的版本,4.3!OK,终于找到问题了,
然后安装个g++4.1,然后一路next,终于安装成功了!
然后在对应的vmx文件中添加了

debugStub.listen.guest32 = "TRUE",
编译完内核之后用GDB调试,还是不行,我几乎要崩溃了,继续查:终于在
http://wiki.osdev.org/VMWare#Guest_debugging


找到了相关的问题,然后添加了monitor.debugOnStartGuest32 = "TRUE" debugStub.listen.guest32.remote = "TRUE"
debugStub.hideBreakpoints=1终于成功了,可以调试了!!!
鉴于我现在极度疲惫,具体的问题我就不说了,Just over!希望对想调试内核的朋友能有所帮助!

阅读(928) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~