杜斌博客:http://blog.db89.org/kernel-source-read-vim-cscope-ctags-taglist/

武特博客:http://edsionte.com/techblog/archives/1689

在linux下我们常用的就是vim+cscope+ctags+taglist组合,下来一一介绍。

1. vim

这个只要有linux系统就OK了。但是ubuntu系统安装后默认的是vi,所以还得安装一下vim:

安装Vim
1
sudo apt-getinstall vim

顺便可以配置一下vim这样的话,代码会高亮的显示出来,方便阅读源码。

vim配置详见:http://blog.db89.org/my-vim-configuration-file/

2. cscope

cscope是一个源码阅读工具,现在大多数linux系统源里都有这个软件,可以直接用yum或者apt来安装,或者下载源码来进行安装。

使用apt系统的使用一下命令:

apt安装cscope
1
sudo apt-getinstall cscope

使用yum的系统使用以下命令:

yum安装Vim
1
yum install cscope

用源码安装使用参看一下命令:

附:源码编译教程:http://blog.db89.org/under-linux-compile-the-basic-steps-of-the-software-source-code/

附:cscope源码下载地址:http://cscope.sourceforge.net/

附:cscope常用命令:http://blog.db89.org/the-cscope-commonly-command/

源码安装cscope
1
2
3
4
5
./configure--prefix=/usr
 
sudo make
 
sudo makeinstall

安装好了就是配置,在kernel.org下载需要的源码,解压后,在该目录下执行:

建立索引
 
1
cscope-Rbkq

其中:

1
2
3
4
5
6
7
R表示把所有子目录里的文件也建立索引
 
b表示cscope不启动自带的用户界面,而仅仅建立符号数据库
 
q生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度
 
k在生成索引文件时,不搜索/usr/include目录

3. ctags

ctags是一个生成链接的一款软件,这个的安装和cscope是一样的过程。

安装ctags
 
1
sudo apt-getinstall ctags

同样的配置,在源码目录下执行:

建立索引
1
ctags-R

4. taglist

taglist是一款vim的插件,它能够将一个文件中的变量,宏,函数单独的提出来,再加上分屏功能,作用就类似于vc下那个编辑器。

附:taglist下载地址:http://www.vim.org/scripts/script.php?script_id=273

taglist插件有两个:taglist.vim和taglist.txt,

将taglist.vim置于/usr/share/vim/vim72/plugin/taglist.vim下,

将taglist.txt置于/usr/share/vim/vim72/doc/taglist.vim下。

这样taglist就安装OK了。

taglist窗口快捷键:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<CR>          跳到光标下tag所定义的位置,用鼠标双击此tag功能也一样
 
o             在一个新打开的窗口中显示光标下tag
 
<Space>       显示光标下tag的原型定义
 
u             更新taglist窗口中的tag
 
s             更改排序方式,在按名字排序和按出现顺序排序间切换
 
x             taglist窗口放大和缩小,方便查看较长的tag
 
+             打开一个折叠,同zo
 
-             将tag折叠起来,同zc
 
*             打开所有的折叠,同zR
 
=             将所有tag折叠起来,同zM
 
[[            跳到前一个文件
 
]]            跳到后一个文件
 
q             关闭taglist窗口
 
<F1>          显示帮助

最后在vim配置文件vimrc中添加:

1
map<F8>:Tlist<CR>

到此,该工具链就安装完毕了,下面是简单的使用。

在源码目录下输入vim,然后在命令模式下:

使用cscope
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cs finds----查找C语言符号,即查找函数名、宏、枚举值等出现的地方
 
cs findg----查找函数、宏、枚举等定义的位置,类似ctags所提供的功能
 
cs findd----查找本函数调用的函数
 
cs findc----查找调用本函数的函数
 
cs findt----查找指定的字符串
 
cs finde----查找egrep模式,相当于egrep功能,但查找速度快多了
 
cs findf----查找并打开文件,类似vim的find功能
 
cs findi----查找包含本文件的文件

在后面跟需要查找的就OK了,这套工具开始用着可能会有点不习惯,但是,一段时间后,会让你感到非常爽的。

如果有什么问题,欢迎大家一起讨论!

内核源码阅读vim+cscope+ctags+taglist的更多相关文章

  1. ubuntu下linux内核源码阅读工具和调试方法总结

    http://blog.chinaunix.net/uid-20940095-id-66148.html 一 linux内核源码阅读工具 windows下当然首选source insight, 但是l ...

  2. Linux内核源码阅读记录一之分析存储在不同段中的函数调用过程

    在写驱动的过程中,对于入口函数与出口函数我们会用一句话来修饰他们:module_init与module_exit,那会什么经过修饰后,内核就能狗调用我们编写的入口函数与出口函数呢?下面就来分析内核调用 ...

  3. linux内核源码阅读之facebook硬盘加速利器flashcache

    从来没有写过源码阅读,这种感觉越来越强烈,虽然劣于文笔,但还是下定决心认真写一回. 源代码下载请参见上一篇flashcache之我见 http://blog.csdn.net/liumangxiong ...

  4. linux内核源码阅读之facebook硬盘加速flashcache之八

    前面我们的分析中重点关注正常的数据流程,这一小节关注如果有异常,那么流程是怎么走完的呢? 1)创建新任务时kcached_job申请不到 2)读写命中时cache块为忙 3)系统关机时处理,系统开机时 ...

  5. linux内核源码阅读之facebook硬盘加速flashcache之三

    上一节讲到在刷缓存的时候会调用new_kcahed_job创建kcached_job,由此我们也可以看到cache数据块与磁盘数据的对应关系.上一篇:http://blog.csdn.net/lium ...

  6. linux内核源码阅读之facebook硬盘加速flashcache之四

    这一小节介绍一下flashcache读写入口和读写的基础实现. 首先,不管是模块还是程序,必须先找到入口,用户态代码会经常去先看main函数,内核看module_init,同样看IO流时候也要找到入口 ...

  7. linux内核源码阅读之facebook硬盘加速flashcache之二

    flashcache数据结构都在flashcache.h文件中,但在看数据结构之前,需要先过一遍flashcache是什么,要完成哪些功能?如果是自己设计这样一个系统的话,大概要怎么设计. 前面讲过, ...

  8. linux内核源码阅读之facebook硬盘加速flashcache之六

    其实到目前为止,如果对读流程已经能轻松地看懂了,那么写流程不需要太多脑细胞.我觉得再写下去没有太大的必要了,后面想想为了保持flashcache完整性,还是写出来吧.接着到写流程: 1530stati ...

  9. linux内核源码阅读之facebook硬盘加速flashcache之五

    正常流程到flashcache_map的1623行或1625行,按顺序先看读流程: 1221static void 1222flashcache_read(struct cache_c *dmc, s ...

随机推荐

  1. Selenium webdriver Java firefox 路径设置问题

    问题: Cannot find firefox binary in PATH. Make sure firefox is installed. 原因:selenium找不到Firefox浏览器. 方法 ...

  2. 查看tomcat启动文件都干点啥---catalina.bat

    在上一次查看tomcat启动文件都干点啥一文中,我们总结出,startup.bat文件的作用就是找到catalina.bat文件,然后把参数传递给它,在startup.bat中,调用catalina. ...

  3. VBA【遍历每个工作表并将工作表表名赋予B2单元格】

    方法一:  存在缺陷:选中所有单元格,批量生成公式时候,每次需要点击进入工作表点击单元格--进入编辑状态,然后公式才会生效 使用公式如下: =,) 附件下载地址:点击下载 方法二: 使用宏编程进行复制 ...

  4. android adt 最新下载地址23.03

    打开这个网址就可以看到adt的详细信息:  http://developer.android.com/sdk/installing/installing-adt.html 或者直接在你的eclipse ...

  5. [Android Bug] ListView中Header, Footer无法隐藏(gone)的问题

    ListView中Header.Footer View应该是会应该遇到, 比如说,滚动到底部时,自动开始加载: 对于一些应用市场,会在Header中加上ViewFlipper做应用推荐(滚动的那种,好 ...

  6. sqlserver获取当月、年的第一天和最后一天

    -- 当月第一天select dateadd(month, datediff(month, 0, getdate()), 0) -- 当月最后一天(思路:下月的第一天减去一天)select datea ...

  7. iOS机型适配

           机型变化 坐标:表示屏幕物理尺寸大小,坐标变大了,表示机器屏幕尺寸变大了: 像素:表示屏幕图片的大小,跟坐标之间有个对应关系,比如1:1或1:2等: ppi:代表屏幕物理大小到图片大小的 ...

  8. UVA 1262 Password 暴力枚举

    Password Time Limit: 3000ms Memory Limit: 131072KB This problem will be judged on UVA. Original ID:  ...

  9. Atitit.  c# 语法新特性 c#2.0 3.0 4.0 4.5 5.0 6.0   attilax总结

    Atitit.  c# 语法新特性 c#2.0 3.0 4.0 4.5 5.0 6.0   attilax总结 1.1. C# 1.0-纯粹的面向对象 1.2. C# 2.0-泛型编程新概念 1.3. ...

  10. UML类图详解_关联关系_一对多

    对于一对多的示例,可以想象一个账户可以多次申购.在申购的时候没有固定上限,下限为0,那么就可以使用容器类(container class)来搞,最常见的就是vector了. 下面我们来看一个“一对多” ...