VIM使用(二) 浏览内核源代码

为了实现类似SourceInsight功能,通过VIM+Ctags+Cscope+Taglist+Source Explore +NERD Tree实现.

一, 安装插件

1)安装Ctags 和Cscope

Ubuntu下可以直接通过命令安装:

sudo apt-get install ctags cscope

注:cscope与ctags功能类似,但能补充Ctags的不足,二者结合便能兼具ctags的便利,双能用cscope补充ctags的局限,算得上是Linux内核代码分析的强大工具.

2)安装taglist :

通过向.vimrc中添加:

Bundle ‘taglist.vim‘Bundle "scrooloose/nerdtree" Bundle "wesleyche/SrcExpl" Bundle "majutsushi/tagbar"

再执行:BundleInstall命令即可自动安装.

3)

二,配置和使用插件

在Linux内核已经自带ctags和cscope的标签数据库的生成脚本,在内核源代码目录下通过命令可生成相应的数据库文件:

make ctags
make cscope

注:前者,生成一个92M的tags文件,后者会生成cscope.files(分析文件的目录)和其它文件数据库.

配置ctags和cscope的数据库与VIM联动:

""" ctags database path """""""
set tags=/home/magc/workspace/linux-2.6.32.67/tags

""" cscope database path """""""
set csprg=/usr/bin/cscope    "whereis cscope
set csto=0            "cscope DB search first
set cst                "cscope db tag DB search
set nocsverb            "verbose off
"cs db path
cs add /home/magc/workspace/linux-2.6.32.67/cscope.out    /home/magc/workspace/linux-2.6.32.67
set csverb            "verbos off

taglist插件配置:

""""""""tag list setting """"""""
filetype on
nmap <F7> :TlistToggle<CR>        "F7 Key = Tag list Toggling
let Tlist_Ctags_Cmd = "/usr/bin/ctags"    " whereis ctags
let Tlist_Inc_WinWidth = 0        "window width change off"
let Tlist_Exit_OnlyWindow = 0
let Tlist_Auto_Open = 0            "VIM打开时
let Tlist_Use_Right_Window = 1

Source Explorer 插件配置:

""""""" Source Explorer Setting """"""

nmap <F4> :SrcExplToggle<CR>
 "control+h进入左边的窗口
nmap <C-H> <C-W>h
 "control+j进入下边的窗口
nmap <C-J> <C-W>j
"control+k进入上边的窗口
nmap <C-K> <C-W>k
"control+l进入右边的窗口
nmap <C-L> <C-W>l  

let g:Srcexpl_winHeight = 8

" // Set 100 ms for refreshing the Source Explorer 

let g:SrcExpl_refreshTime = 100

" // Set "Enter" key to jump into the exact definition context 

let g:SrcExpl_jumpKey = "<ENTER>"

" // Set "Space" key for back  the definition context 

let g:SrcExpl_gobackKey = "<SPACE>"
let g:SrcExpl_isUpdateTags = 0

NERD Tree插件配置:

""""" NERD Tree Setting """""""""

let NERDTreeWinPos="left"

nnoremap <F2> :NERDTreeToggle<CR>

注:上面设置中包含的快捷键有:

  • F7打开Taglist
  • F4打开Source Explorer
  • F2打开Nerd Tree
  • control+h进入左边的窗口
  • control+k进入上边的窗口
  • control+j进入下边的窗口
  • control+l进入右边的窗口

时间: 2024-10-18 11:13:36

VIM使用(二) 浏览内核源代码的相关文章

Linux内核源代码分析方法

Linux内核源代码分析方法   一.内核源代码之我见 Linux内核代码的庞大令不少人"望而生畏",也正由于如此,使得人们对Linux的了解仅处于泛泛的层次.假设想透析Linux,深入操作系统的本质,阅读内核源代码是最有效的途径.我们都知道,想成为优秀的程序猿,须要大量的实践和代码的编写.编程固然重要,可是往往仅仅编程的人非常easy把自己局限在自己的知识领域内.假设要扩展自己知识的广度,我们须要多接触其它人编写的代码,尤其是水平比我们更高的人编写的代码.通过这样的途径,我们能够跳出

如何切入 Linux 内核源代码

Makefile不是Make Love 从前在学校,混了四年,没有学到任何东西,每天就是逃课,上网,玩游戏,睡觉.毕业的时候,人家跟我说Makefile我完全不知,但是一说Make Love我就来劲了,现在想来依然觉得丢人. 毫不夸张地说,Kconfig和Makefile是我们浏览内核代码时最为依仗的两个文件.基本上,Linux内核中每一个目录下边都会有一个 Kconfig文件和一个Makefile文件.对于一个希望能够在Linux内核的汪洋代码里看到一丝曙光的人来说,将它们放在怎么重要的地位都

Vim 中文件目录浏览插件——NERD tree

说明 :vim的插件NERDTree用于使得vim窗口分左右窗口显示的用法说明.其中,左侧为目录的树形界面,简称为NERDTree界面,右则为vim界面. 一.配置步骤 下载地址: http://www.vim.org/scripts/script.php?script_id=1658 或者 http://download.csdn.net/detail/caoyingsdhzcx/5752889 树形目录插件NERDTree的安装方法,如下: 1. 在当前用户文件夹(例如simpman)下,建

Android源代码和内核源代码的下载,编译和运行

笔者根据罗升阳老师的<Android 系统源代码情景分析>一书,尝试下载,编译和运行Android源代码和内核源代码.但可能是软件源"被墙"或版本更新的原因,期间遇到诸多问题.笔者求助于强大的度娘和谷歌,终于编译成功,现将修改的步骤记录如下: 一.下载相关的工具包和依赖包 1.git工具的下载,不多说 2.Java SDK的下载(参考网址:http://blog.csdn.net/zjclugger/article/details/11762085) 此处建议下载jdk1.

Linux内核源代码情景分析-共享内存

一.库函数shmget()--共享内存区的创建与寻找 asmlinkage long sys_shmget (key_t key, size_t size, int shmflg) { struct shmid_kernel *shp; int err, id = 0; down(&shm_ids.sem); if (key == IPC_PRIVATE) { err = newseg(key, shmflg, size);//分配一个共享内存区供本进程专用,最后返回的是一体化的标示号 } el

Linux内核源代码情景分析-mmap后,文件与虚拟区间建立映射

一.文件映射的页面换入 在mmap后,mmap参考Linux内核源代码情景分析-系统调用mmap(),当这个区间的一个页面首次受到访问时,会由于见面无映射而发生缺页异常,相应的异常处理程序do_no_page(). static inline int handle_pte_fault(struct mm_struct *mm, struct vm_area_struct * vma, unsigned long address, int write_access, pte_t * pte) {

Linux内核源代码情景分析-交换分区

在Linux内核源代码情景分析-共享内存中,共享内存,当内存紧张时是换出到交换分区. 在Linux内核源代码情景分析-mmap后,文件与虚拟区间建立映射中,文件映射的页面,当内存紧张时是换出到硬盘上的文件中. 这里的交换分区,就是是swap分区,记得给电脑安装ubuntu时,就有一项是swap分区. 交换分区和文件的区别是: 文件是在一个具体的文件系统之下的,交换分区没有这个必要,它可能是一个裸分区,不需要文件系统. 需要说明一点,并不是所有从物理内存中交换出来的数据都会被放到Swap中(如果这

Linux内核源代码情景分析-系统调用brk()

首先看下进程地址空间示意图: 我们简单的说,从低地址到高地址,代码区和数据区,空洞,堆栈区.    在Linux内核源代码情景分析-内存管理之用户堆栈的扩展,我们申请了从堆栈区往下,数据区上面的页面.    在Linux内核源代码情景分析-内存管理之用户页面的换入,我们申请了用于换入/换出的页面.    在本文中,我们申请的是从数据区往上,堆栈区下面的页面.    我们通过一个实例来分析,brk(),见下图: 1.由于新边界比旧边界地址高,我们申请旧边界和新边界之间的页面.就是把对应的虚拟地址映

Linux内核源代码情景分析-进程的创建,执行,等待,消亡

我们先看下面的程序: #include <stdio.h> int main() { int child; char *args[] = {"/bin/echo", "Hello", "World!", NULL}; if(!(child = fork())) { /* child */ execve("/bin/echo", args, NULL}); printf("I am back, someth