下载安装和使用kdump的经历(二)

更新,最后在Centos上面安装kdump成功。并且在centos上面可以自己升级内核,并且新升级的内核可以使用kdump。在源码路径下使用指令 make vmlinux就可以生成相应内核版本的vmlinux文件,用于配合core文件进行调试。终于可以调试了。

 

你说装一个内核的调试的工具怎么就这么难。还有没有其他的办法? 虽然我用linux已经有三年多的经验了,但是经过这两个星期的折腾,觉得自己依然是个linux白痴。

centos我觉得是一个不错的操作系统,打算以后就用这个了。安装了最精简的minimal的centos,不带图形界面,在虚拟机上启动较快,因为开发内核相关的东西,所以经常需要重启,所以重启的快慢非常的关键。

最后,开始记录用centos 装kdump的经历。

1.  我用的系统时centos6.4。上面的内核是2.6.28。用指令查看的话,显示的是2.6.32-358.14.1.e16.i686。不懂为何这种发行系统的内核号这么长。在centos上安装kdump,我是按照这个网页http://www.geekpeek.net/enable-kdump-on-centos/上面指示的来操作的。

其中,第一步:yum –enablerepo=debug install kexec-tools crash kernel-debug kernel-debuginfo-`uname -r` 

这个和fedora上面的过程相类似。其实我还是不明白kernel-debug和kernel-debuginfo-`uname -r` 究竟在计算机里面安装了什么软件?是否指示 /usr/lib/debug/ 目录下面的内容。执行完这部之后,在 /usr/lib/debug 目录下生成了boot lib usr 三个路径,在lib/modules 路径下面,有文件夹2.6.32-358.e16.i686(与内核的版本号稍有区别)。在这个文件夹里面有 vmlinux文件。查看vmcore文件时,需要的就是这个文件。

这一步非常的慢。

 

按照这个网页中的记录,我继续安装,直到安装完毕。

用 sysrq+c 进行测试,可以看到生成了vmcore文件。并且可以用crash 进行分析。

为了安装crash、make gcc gdb等,我还用yum -install  "Development Tools" 安装了需要的一整套开发包,这个命令非常方便。

 

2. 到这里,就可以算是初步成功了,终于可以使用crash 查看 内核的vmcore文件了。 我非常的高兴。然后开始在虚拟机上面安装 vmtools,安装vmtools时候,提示 找不到 kernel-header 的路径。另外在这个虚拟机上面不能编译内核模块,编译时会报错。于是经过搜索,按照网上的方法,我执行了yum upgrade  kernel kernel-devel。这个指令的意思是同步 kernel 和 kernel-devel 的版本,因为此前的kernel 和 kernel-devel的版本是不相同的。 其实 我想问的是kernel-devel 到底是哪些文件? 在哪里可以看到kernel-devel内核开发包的版本是什么?kernel-devel 是不是只是 /usr/src/kernels/ 路径下面的那个内核的源代码。在执行这条指令之前,在这个路径下面我可以看到的内核源代码文件是: /usr/src/kernels/2.6.32-358.e16.i686。 这个文件名与我的内核确实是稍有差别的。

经过很长的时间之后,这条指令终于执行完毕了,该指令下载了大概100M的数据。这时,我去查看 /usr/src/kernels/ 下的文件变成了2.6.32-358.14.1.e16.i686。确实是和内核的版本相同了。然后重启电脑之后,我的虚拟机就变成了两个内核:2.6.32-358.14.1.e16.i6862.6.32-358.e16.i686。

这究竟是为什么?这两个内核有什么区别?

我进入了最初始的内核  2.6.32-358.14.1.e16.i686 。然后我又进行了自己的试验,用 sysrq+c 让内核crash之后,查看生成的vmcore文件。结果这时,crash提示的是 vmcore文件与 vmlinux文件的版本不相同。气炸我了,早知道就不安装vmtools了,现在到底是什么原因? 该怎么修复?

 

3.  后来,我又执行了指令 yum install kernel-devel。执行这条指令之后,/usr/src/kernel 下面的文件又发生的变化,又变成了之前的版本。至此,这两个非常接近的版本已经把我给整晕了。

然后,在现在这个系统上面 可以用crash 查看vmcore文件。

 

但是,现在的问题是,系统crash时,kdump会记录内存中的信息,并重新启动系统。但是 记录信息的过程,有时候会非常非常的慢,而且会卡在某一个地方,通常是在找硬盘时候。这些问题都是偶尔出现偶尔不出现。

我觉得这个也和vmware有关系,如果用真实的机器 就不会出现这样的问题。

 

现在,我已经放弃使用kdump了。不知道还没有什么其他办法。。。。。。

 

求助中。。。。。

 

你可能感兴趣的:(内核开发与调试)