Chinaunix首页 | 论坛 | 博客
  • 博客访问: 329161
  • 博文数量: 85
  • 博客积分: 3433
  • 博客等级: 中校
  • 技术积分: 844
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-29 01:11
文章分类

全部博文(85)

文章存档

2013年(1)

2012年(12)

2011年(13)

2010年(59)

我的朋友

分类: LINUX

2010-09-09 11:02:46

kdb编译,安装,使用完全手册         当前最愤恨的就是网上太少又关于kdb的文章,有很多误导,即使有大都很难按照步骤成功运行。

参考资料:

笔者通过大量的实践和对kdb的使用经验,愿意把详细的步骤写出来与大家分享。

参考资料:


编译kdb。

步骤1:

Svn8.Com

kdb不是Linux内核的标准配置,需要先到这个网站上去下载一个版本,2个文件
ftp://oss.sgi.com/projects/kdb/download/v4.4/

kdb-v4.4-2.6.15-common-1(kdb-v4.4-2.6.15-common-1.bz2)
kdb-v4.4-2.6.15-i386-1(kdb-v4.4-2.6.15-i386-1.bz2)

Svn8.Com

步骤2:

Bbs.Svn8.Com

下载一个纯的linux内核源码文件。

参考资料:

记住,一定要是纯的linux内核源码,不能是什么redhat等等公司出的版本。否则在pacth时就会出现error了。 Svn中文网

比如有一次我把patch打到了/usr/src/redhat/BUILD/kernel-2.6.15/linux-2.6.15.i686里就发生了错误,这个目录是redhat自己改过的源码,不是纯的源码,所以出错。

Bbs.Svn8.Com

下载到的源码必须和步骤1的小版本一致。比如我的纯linux内核版本是2.6.15-1***。

参考资料:

把linux纯内核源码文件命名为linux,放到/usr/src中。 参考资料:

步骤3: Svn中文网

把步骤1得到的解压后的2个文件kdb-v4.4-2.6.15-common-1,kdb-v4.4-2.6.15-i386-1放到/usr/src/linux目录里。 Svn中文网

这时就会很顺利的patch成功,只要不出现什么reject这样的提示就算成功。

Svn中文网

一旦发现出现了reject这样的信息,只有2种可能:

一是你的内核不是真正的内核,是公司改进过的内核;二是kdb版本和源码版本不一致。 Svn中文网

步骤4:

该linux配置,在这里千万不要用make menuconfig这样的命令,你可能很奇怪,为什么?我的经验表明,不同的linux/kdb版本menuconfig出来的kdb选项有很大的不 同,用语言是无法准确描述,我原来参考很多网上的资料都是根据menuconfig来,造成了描述矛盾,很难搞明白。在这里,我们直接改写文件最为牢靠。

Svn中文网

先运行make menuconfig这个命令,不更改任何选项,直接回车,然后选择yes,这样就能生成一个隐藏的文件.config了。

参考资料:

用vi/vim 打开这个文件,

改写如下:
CONFIG_KDB=y
CONFIG_KDB_MODULES=n
CONFIG_KDB_OFF=n
CONFIG_KALLSYMS=y
CONFIG_FRAME_POINTER=y Bbs.Svn8.Com

保存。记住,这样做比在menuconfig菜单选项里选择要安全和清晰的多。

Svn8.Com

打开kdb/kdb_cmds这个文件,全部注释掉所有:例如:

Svn8.Com

# Initial commands for kdb, alter to suit your needs.
# These commands are executed in kdb_init() context, no SMP, no
# processes. Commands that require process data (including stack or
# registers) are not reliable this early. set and bp commands should
# be safe. Global breakpoint commands affect each cpu as it is booted. Svn8.Com

# Standard debugging information for first level support, just type archkdb
# or archkdbcpu or archkdbshort at the kdb prompt. Svn8.Com

defcmd archkdb "" "First line arch debugging"
#set BTSYMARG 1
#set BTARGS 5
#-archkdbcommon
#-bta
endefcmd

defcmd archkdbcpu "" "archkdb with only tasks on cpus"
#set BTSYMARG 1
#set BTARGS 5
#-archkdbcommon
#-btc
endefcmd

defcmd archkdbshort "" "archkdb with less detailed backtrace"
#set BTSYMARG 0
#set BTARGS 0
#-archkdbcommon

#-bta
endefcmd

为什呢,因为大家刚开始接触kdb时,非常不熟悉,如果把全部选项都注释后,kdb就变的比较容易操作,否则重启系统以后,你还以为安装出错呢,不信可以试试,呵呵。等你水平高了以后,在改过来,重新编译系统就可以了。

Svn8.Com

步骤5:

改写Makefile文件中的EXTRAVERSION,随便取个名字吧。
make all
make bzImage
make modules
make modules_install
make install Bbs.Svn8.Com

有文章说要改写什么lilo文件。 Bbs.Svn8.Com

不用改写什么lilo文件,你的系统如果只支持grub,你根本在系统里找不到lilo,改什么改!!! Svn8.Com

步骤6:

参考资料:

重启,在系统选项里选择这个新的系统就可以了。 参考资料:

在系统开始引导时,你会在屏幕上看到3-5行关于kdb的信息,其实就是kdb_cmds里的配置,我们已经注释掉了,所以光显示,不会运行(这样 最安全,否则如果你对kdb不熟,改kdb_cmds错了,在启动时就会出现什么内核panic的恐怖信息,这就是总是不能启动成功的原因)。

Svn8.Com

看到其他的启动跟没安装kdb时一样,成功进入提示你输入用户名,密码进入系统时,就表明你的kdb才真正的安装成功了。

Bbs.Svn8.Com

启动kdb。 Svn中文网

用root权限进入系统。

Bbs.Svn8.Com

# echo "1" > /proc/sys/kernel/kdb 回车以后没什么反映,说明启动成功了。

Bbs.Svn8.Com

我有个同事运行这个命令以后,提示找不到kdb这个文件,后来我给他调试时发现kdb根本就没安装成功,最后我给他重新安装就没问题了。 参考资料:

按“Pause Break”键,就会出现kdb的使用接口了。如果想退出,就输入go,然后按回车即可。我后来发现通过f1进入系统后,输入go+回车后 Bbs.Svn8.Com

怎么也退不出来,在f2进入系统后,输入go+回车后就很顺利的退出了,这个现象非常奇怪,我猜可能跟linux本身有关系。 Svn中文网

使用kdb。

Svn8.Com

谁说kdb不能源码级调试,那时他没真正用过kdb.

Svn中文网

其实kdb是可以源码级调试的,在这里的前提是对源码级调试的定义,反正你使用kdb用单步跟踪时是可以看到源码也一行一行的自动走的,对 Bbs.Svn8.Com

你怀疑有bug的地方进行查看,非常方便。

参考资料:

关于使用kdb谁说都没用,关键看文档,记住不要看其他任何第三方的文档(有很多误导),就看上面你的Documentation/kdb里的slides等文档,这才是最没有污染和最正宗的文档。 Svn中文网

  Bbs.Svn8.Com

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