Hi 大家好
這篇是給 容易健忘的小弟做紀錄用
使用眾所皆知的VIM 和其plugin 套件 搭配Ctags & cscope
先到linux kernel 網站 下載kernel source code,小弟這邊採用 2.6.30為例
wget https://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.30.4.tar.gz
將其解壓縮到您想放置的位置
tar -zxvf linux-2.6.30.4.tar.gz
可先行 sudo apt-get update 在試一次下方的指令
sudo apt-get install ctags
sudo apt-get install cscope
一般ctags 生成 tag的命令 是用 ctags -R,不過因為kernel 內有很多不同硬體架構的平台。
e.g. x86 arm mips 等,如果只用 ctags -R 將會生成很多不相關的 變得麻煩。
假設 我們只想要生成ARM的 tags
先檢查 tags.sh 文件是否存在
ls -la ./scripts/tags.sh
-rwxr-xr-x 1 dai-pc dai-pc 4119 7月 31 2009 ./scripts/tags.sh
用make 命令 幫忙生成 ARM的 tags
dai-pc@daipc-All-Series:~/kernel_trace/linux-2.6.30.4$ make tags ARCH=arm
GEN tags
dai-pc@daipc-All-Series:~/kernel_trace/linux-2.6.30.4$ ls -lah tags
-rw-r--r-- 1 dai-pc dai-pc 89M 8月 10 14:13 tags
生成 大小約 89MB 的tags file
再搭配增加 生成 cscope 用的文件 做輔助
dai-pc@daipc-All-Series:~/kernel_trace/linux-2.6.30.4$ make cscope ARCH=arm
GEN cscope
dai-pc@daipc-All-Series:~/kernel_trace/linux-2.6.30.4$ ls -lah cscope.*
-rw-r--r-- 1 dai-pc dai-pc 449K 8月 10 14:16 cscope.files
-rw-r--r-- 1 dai-pc dai-pc 178M 8月 10 14:16 cscope.out
-rw-r--r-- 1 dai-pc dai-pc 34M 8月 10 14:16 cscope.out.in
-rw-r--r-- 1 dai-pc dai-pc 258M 8月 10 14:16 cscope.out.po
dai-pc@daipc-All-Series:~$ cd .vim/
dai-pc@daipc-All-Series:~/.vim$ ls
dai-pc@daipc-All-Series:~/.vim$ cp -rf ~/test/srcexpl.vim ./
dai-pc@daipc-All-Series:~/.vim$ cp -rf ~/test/NERD_tree.zip ./
dai-pc@daipc-All-Series:~/.vim$ cp -rf ~/test/taglist_45.zip ./
dai-pc@daipc-All-Series:~/.vim$ cd ..
dai-pc@daipc-All-Series:~$ cd .vim/
dai-pc@daipc-All-Series:~/.vim$ ls
NERD_tree.zip srcexpl.vim taglist_45.zip
dai-pc@daipc-All-Series:~/.vim$ mkdir plugin
dai-pc@daipc-All-Series:~/.vim$ mv srcexpl.vim plugin/
dai-pc@daipc-All-Series:~/.vim$ unzip NERD_tree.zip
Archive: NERD_tree.zip
inflating: doc/NERD_tree.txt
inflating: nerdtree_plugin/exec_menuitem.vim
inflating: nerdtree_plugin/fs_menu.vim
inflating: plugin/NERD_tree.vim
dai-pc@daipc-All-Series:~/.vim$ unzip taglist_45.zip
Archive: taglist_45.zip
inflating: plugin/taglist.vim
inflating: doc/taglist.txt
dai-pc@daipc-All-Series:~/.vim$ cd plugin/
dai-pc@daipc-All-Series:~/.vim/plugin$ ls
NERD_tree.vim srcexpl.vim taglist.vim
dai-pc@daipc-All-Series:~/.vim/plugin$ cd ~
dai-pc@daipc-All-Series:~$ whereis ctags
ctags: /usr/bin/ctags /usr/bin/X11/ctags /usr/share/man/man1/ctags.1.gz
dai-pc@daipc-All-Series:~$ whereis cscope
cscope: /usr/bin/cscope /usr/bin/X11/cscope /usr/share/man/man1/cscope.1.gz
設定 家目錄的 .vimrc file [如為空的話則 生成一個]
"----------------------------"
"Vim setting "
"----------------------------"
set nu "line number
set ai "auto indent
set ts=4 "tab size
set bg=dark "backgroud color
"---------------"
"Ctags path "
"---------------"
set tags=/home/dai-pc/kernel_trace/linux-2.6.30.4/tags "ctags DB Path change to myself use.
"-------------------------"
"cscope data path setting "
"-------------------------"
set csprg=/usr/bin/cscope "cscope bin path
set csto=0 "cscope DB search first
set cst "cscope DB tag search
set nocsverb "verbose off
"cscope DB locate path setting
cs add /home/dai-pc/kernel_trace/linux-2.6.30.4/cscope.out /home/dai-pc/kernel_trace/linux-2.6.30.4
set csverb "verbose off
"-----------------------"
"Tap List setting "
"-----------------------"
filetype on "vim filetype on
nmap :TlistToggle
let Tlist_Ctags_Cmd = "/usr/bin/ctags" "ctags bin path
let Tlist_Inc_Winwidth = 0 "window width change off
let Tlist_Exit_OnlyWindow = 0 "tag/file when complete search taglist
"window close = off
let Tlist_Auto_Open = 0 "vim start time window open = off
let Tlist_Use_Right_Window = 1
"-----------------------------------"
"Source Explorer evcironment setting"
"-----------------------------------"
nmap :SrcExplToggle
nmap h
nmap j
nmap k
nmap l
let g:SrcExpl_winHeight = 8
let g:SrcExpl_refreshTime = 100
let g:SrcExpl_jumpKey = ""
let g:SrcExpl_gobackkey = ""
let g:SrcExpl_isUpdateTags = 0
"-----------------------------"
"NERD Tree environment setting"
"-----------------------------"
let NERDTreeWinPos = "left"
nmap :NERDTreeToggle
接著 再回到 您 放kernel code的位置 [其實不回去也沒關西... 因為在vimrc檔案用絕對路徑了]
按下 vim ,在接著按 F7 F8 F9 的按鈕 應該就可以看到類似 如下的圖片了
基本 就像是窮人版的 source in sight ,至於操作方式 小弟下次再繼續整理補充
以上 下台一鞠躬 感謝觀賞
留言
有些IDE 也都支援Ctags 那類的功能,只是說... 只要code 太多,似乎都很容易當掉或是parse不完
ecllipse 個人時常遇到這類狀況@@"