[Code小心得]建置 Trace linux kernel code 環境


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

安裝分析用工具 ctags & cscope,如果沒搜尋 可以安裝
可先行 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

在去 www.vim.org 網站 下載相關plugin,Source Explor ,NERD Tree ,Tag List 這三個,且按照如下步驟 解壓縮至 您的家目錄 ./.vim/plugin 資料夾內

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 ,至於操作方式  小弟下次再繼續整理補充

以上 下台一鞠躬  感謝觀賞

=================2015/08/17 更新======================

打造自己的VIM

有興趣的人也可以參考上面這篇文章  我覺得寫得很好喔



留言

descent寫道…
今天試了一下, 不是很好用
cam11505寫道…
XDDD 窮人版的,只能將就囉
有些IDE 也都支援Ctags 那類的功能,只是說... 只要code 太多,似乎都很容易當掉或是parse不完
ecllipse 個人時常遇到這類狀況@@"