使用vim+ctags+cscope阅读内核源码

2010年10月11日 由 edsionte 留言 »

有网络的时候,使用LXR(The Linux Cross Referencer)在线阅读源码固然是一件很爽的事情。在无网络的情况下,只通过vim进入内核源码那样查找就显得有些勉强。接下来,本文将介绍一种快速定位源码的工具:ctags和cscope。通过vim编辑器,再配合使用上述两种工具就可以快速定位想要查看的源码。好了,开始吧!

1.下载最新内核源码包,解压至主目录下

接下来的步骤当然可以在当前系统内核源码目录下进行,不过为了保险期间还是最好在主目录下专门创建一个存放源码的目录。下文所说的源码目录均指主目录下的源码目录。

2.安装ctags

使用命令:sudo apt-get install ctags

3.安装cscope

使用命令:sudo apt-get install cscope

4.成标签文件

在源码目录下通过命令make tags生成标签文件

5.生成索引文件

在源码目录下通过命令make cscope生成索引文件。

6.将索引文件导入vim中

使用命令打开vim的配置文件:sudo gedit /etc/vim/vimrc;然后在该文件下添加如下代码:

if filereadable("cscope.out")
    cs add cscope.out
endif

这样每次打开vim就可以直接使用cscope了。

完成以上步骤以后就可以通过vim进行源码的快速定位了。上述安装的ctags和cscope都属于源码索引工具,因此仅安装两者之一也是可以的。不错,虽然ctags可以快速定位所输入的标签,但cscope的使用方法则更灵活。所以两者同时安装使用起来更方便。下面是一些简单的使用方法,仅供参考。

1.使用ctags

ctags的使用特别简单,首先进入源码目录下,打开vim编辑器,在命令模式下输入:tag tag_name 按回车即可。通常tag_name可以是结构体名称,函数名称,宏变量名称等。通常输入上述命令后,因为找到的标签并不唯一,所以还需要配合使用下述命令:

tfirst:跳至第一个

tnext:跳至下一个

tlast:跳至最后一个

2.使用cscope

虽然ctags使用方便快捷,但有时候使用cscope更灵活,首先可以看cscope的帮助文件:

cscope 命令:
add  :添加一个新的数据库             (用法: add file|dir [pre-path] [flags])
find :查询一个模式                   (用法: find c|d|e|f|g|i|s|t name)
c:找到调用这个函数的函数
d:找到被这个函数调用的函数
e:找到这个 egrep 模式
f:找到此文件夹
g:找到这个定义
i:找文件 #包括这个文件
s:找到这个 C 符号
t:找到对其的赋值
help :显示此信息                     (用法: help)
kill :结束一个连接                   (用法: kill #)
reset:重置所有连接                   (用法: reset)
show :显示连接                       (用法: show)

通过上面的帮助文件可以发现如果想找到request_irq函数的定义处代码,即可使用这个命令:cs find g request_irq来进行查找。大多数情况下查找的结果并不唯一,因为需要在多个结果中通过头文件来继续查看。

通常是先通过cscope大致定位到头文件,再通过ctags在该头文件中详细定位。其实这两种工具并不局限于上述用法,更多用法可以再深入使用的过程中慢慢摸索,而且配合正则表达式等效果会更好。

广告位

13 条评论

  1. edsionte说道:

    test~

    [回复一下]

    edsionte 回复:

    @edsionte, ~~~

    [回复一下]

  2. 123说道:

    你利用cscope.files 就可以避免多个结果的出现。

    当然必须制定搜索文件,但是工作量不大。

    [回复一下]

  3. tty说道:

    [root@albert linux-2.6.34.7]# vim
    处理 /etc/vimrc 时发生错误:
    第 107 行:
    E568: 重复的 cscope 数据库未被加入
    请按 ENTER 或其它命令继续.
    我在完成了上面的操作之后,在有源代码的目录下,执行vim时出现了这个错误。
    —-这该怎么搞啊?

    [回复一下]

  4. edsionte说道:

    @tty, 你在那个版本的linux下?应该是/etc/vim/vimrc吧?你是?

    [回复一下]

  5. hailongqiu说道:

    不错,学习了!

    [回复一下]

  6. Yafei说道:

    还是不如Source Insight方便。不过linux下,我也只能这么用了。

    [回复一下]

    edsionte 回复:

    @Yafei, 你没用习惯吧,我觉得方便的。

    [回复一下]

  7. fresh说道:

    你好,ctags和cscope的源码目录是哪个?

    [回复一下]

    edsionte 回复:

    @fresh, 需要另外下载。

    [回复一下]

    fresh 回复:

    @edsionte,

    谢谢你的回复!恩 ,我用你上面说的那指令下载安装的,只在我的/usr/bin下找到这2个可执行文件(我把这个目录理解为源码目录),但是不能make tags,求指点

    [回复一下]

  8. 御宅暴君说道:

    原来 ctags 是有用的源代码阅读工具,学习了。

    不知你后来是否又发现了更先进的相关 Vim 插件?

    [回复一下]

    edsionte 回复:

    @御宅暴君, linux就vim+插件,win下si

    [回复一下]

发表评论

windows 7 ultimate product key

windows 7 ultimate product key

winrar download free

winrar download free

winzip registration code

winzip registration code

winzip free download

winzip free download

winzip activation code

winzip activation code

windows 7 key generator

windows 7 key generator

winzip freeware

winzip freeware

winzip free download full version

winzip free download full version

free winrar download

free winrar download

free winrar

free winrar

windows 7 crack

windows 7 crack

windows xp product key

windows xp product key

windows 7 activation crack

windows7 activation crack

free winzip

free winzip

winrar free download

winrar free download

winrar free

winrar free

download winrar free

download winrar free

windows 7 product key

windows 7 product key