閱讀linux原始碼的工具—lxr和glimpse簡介

來源:互聯網
上載者:User
我們在閱讀linux原始碼時都有這樣的體會:核心的組織相對鬆散,在看一個檔案時往往要牽涉到其他的標頭檔、原始碼檔案。如此來回跳轉尋找變數、常量、函數的定義十分不方便,這樣折騰幾次,便使讀代碼的心情降到了低點。

  lxr(linux cross reference)就是一個解決這個問題的工具:他 對你指定的原始碼檔案建立索引資料庫,利用perl指令碼CGI動態產生包含源碼的web頁面,你可以用任何一種瀏覽器查閱。在此web頁中,所有的變數、 常量、函數都以超串連的形式給出,十分方便查閱。比如你在閱讀/usr/src/linux/net/socket.c的原始碼,發現函數 get_empty_inode不知道是如何以及在哪裡定義的,這時候你只要點擊get_empty_inode,lxr將返回此函數的定義、實現以及各 次引用是在什麼檔案的哪一行,注意,這些資訊也是超串連,點擊將直接跳轉到相應的檔案相應的行。另外lxr還提供標識符搜尋、檔案搜尋,結合程式 glimpse還可以提供對所有的源碼檔案進行全文檢索索引,甚至包括注釋!

  下面將結合執行個體介紹一下lxr和glimpse的基本安裝和使用,由於glimpse比較簡單,就從它開始:

  首先訪問網站: http://glimpse.cs.arizona.edu/ 得到glimpse的源碼,比如我得到的是glimpse-4.12.5.tar.gz . 用root登入,在任一目錄下用tar zxvf glimpse-4.12.5.tar.gz解開壓縮包,在目前的目錄下出現新目錄glimpse-4.12.5 .進入該目錄,執行make即可。進入bin目錄,將檔案glimpse和glimpseindex拷貝到/bin或/usr/bin下即可。如果單獨使 用glimpse,那麼只要簡單的執行glimpseindex foo即可,其中foo是你想要索引的目錄,比如說是/usr/src/linux .glimpseindex的執行結果是在你的起始目錄下產生若干.glimpse*的索引檔案。

  然後你只要執行glimpse yourstring即可尋找/usr/src/linux下所有包含字串yourstring的檔案。

  對於lxr,你可以訪問lxr.linux.no得到它的原始碼解包後,遵循如下步驟:
/*下面的文字來源於lxr的協助文檔以及本人的安裝體會*/

1)修改Makefile中的變數PERLBIN和INSTALLPREFIX,使它們分別為 perl程式的位置和你想lxr安裝的位置.在我的機器上,PERLBIN的值為/usr/bin/perl .至於INSTALLPREFIX,有如下原則,lxr的安裝路徑必須是web伺服器能有許可權訪問。因此它的值簡單一點可取 /home/httpd/html/lxr (對於Apache web server)。

2)執行 make install

3)修改$INSTALLPREFIX/http/lxr.conf :
baseurl : http://yourIP/lxr/http/
htmlhead: /home/httpd/html/lxr/http/template-head
htmltail: /home/httpd/html/lxr/http/template-tail
htmldir: /home/httpd/html/lxr/http/template-dir
sourceroot : /usr/src/linux # 假如對linux核心代碼索引
dbdir : /home/httpd/html/lxr/dbdir/ #dbdirk可任意起名,且位置任意 glimpsebin: /usr/bin/glimpse  #可執行程式glimpse的位置

4)在$INSTALLPREFIX/http/下增加一個檔案.htaccess內容:
<Files ~ (source|search|ident|diff|find)$> ***
SetHandler cgi-script
</Files>

上面這個檔案保證Apache server將幾個perl檔案作為cgi-script.

5)按照lxr.conf中的設定建立dbdir ,按照上例,建立目錄
/home/httpd/html/lxr/dbdir
進入這個目錄執行$INSTALLPREFIX/bin/genxref yourdir

其中yourdir是源碼目錄,比如/usr/src/linux

如果要結合glimpse,則執行glimpseindex -H . yourdir

6)修改 /etc/httpd/conf/access.conf ,加入

<Directory /home/httpd/html/lxr/http>

Options All

AllowOverride All

order allow,deny

allow from all

</Directory>

7)進入/etc/rc.d/init.d/ 執行

killall httpd

./httpd start

進入X ,用瀏覽器 http://yourIP/lxr/http/blurb.html

大功告成 ,這下你可以舒心的讀源碼了。  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.