Cscope使用在Linux Kernel

在大型專案上使用Cscope

Reference : http://cscope.sourceforge.net/large_projects.html

這一篇文章會教你怎麼用Cscope來Trace Linux Kernel

1. 取的Linux Kernel的Source Code

首先到http://www.kernel.org來下載Linux Kernel的source code, 我的範例是下載linux-3.8.8的版本
所以我將檔案下載放在/home/UserName底下並且解壓縮到/home/UserName/linux-3.8.8

2. 決定Cscope database的檔案位置

我將Cscope database有關的的檔案放在/home/UserName/cscope這個目錄來做範例

3. 建立cscope.files來讓Cscope掃描檔案

然後這個步驟就是要建立cscope.files,當然我們要trace的code一定是以C/C++為主, 所以要使用find的指令來先找出
C/C++相關的檔案,以下是比較簡單的方式

    $> cd /home/UserName/cscope
    $> find /home/UserName/linux-3.8.8 -name '*.[chxsS]' > cscope.files

因為原文所寫的find的方式我不是很懂,所以我就不寫在這篇,有興趣的人可以看原文然後試試看。

4. Generate the Cscope database

建立cscope的database很簡單只要兩個步驟:

    $> cd/home/UserName/cscope   
    $> cscope -b -q -k

    -b: 告訴Cscope只需要建立database就好,不要開啟CscopeGUI
    -q: 建立inverted index file ,他會讓你在大型專案來更快速的搜尋
    -k: kernel model 這個flag會告訴Cscope不要將你的source code中#include的/usr/include底下任何Header的檔案也加入到database

5. Using the database

使用cscope的database有兩種方式,第一種是如果你喜歡用vim or emacs/xemacs,原文建議你用的是
Vim看tutorial for Vim, 如果你用的是emacs那就下載cscope的source code裡面有contrib/xcscope這個目錄
裡面有相關設定的檔案。

再來另一種是用cscope所提供的文字界面來做trace code,然後他會使用你$EDITOR所預設的編輯器來看code
然後你要用這個功能的話在terminal輸入

    $> cscope -d

這個指令會告訴cscope不要再次產生database,然後直接開始搜尋你要找的code。如果你一不小心在
/home/UserName/cscope底下輸入cscope而沒有加上任何的flags,你會發現你的database會被重新建立
,哪麼就沒有kernel model或fast index。所以你需要在從步驟4從頭開始建立正確的database。

6. Regenerating the database when the source code changes

當你的source code有改變或是新增加檔案,你就要將新增加的檔案加入到cscope.files(步驟3),

然後再次重新build你的database(步驟4)

張貼留言

這個網誌中的熱門文章

Unions 在C語言的簡單介紹

解釋scope.$apply用來做什麼? -- AngularJS

JavaScript的Timer用法