linxu下閱讀核心原始碼,通常都使用vim + ctags 或者 lxr進行,我個人比較傾向於lxr,因為lxr提供了良好的介面,函數和定義都使用超連結標記出來,可以很方便的跟蹤到函數內部去查看詳細或者查看資料結構的定義等。網上有現成的網站提供了這樣的服務,如果你只是偶爾看看核心原始碼的話,其實直接登入某些提供這樣服務的網站就差不多了,比如LXR,這個網站提供的體驗相當不錯,我以前就是經常在這個網站上查看原始碼的,畢竟搭建這個環境的過程中,要建立檔案檢索的過程還是比較漫長的。
利用lxr查看核心原始碼,其實就是搭建一個本地的網站,在ubuntu上,我們可以快速的完成這些工作。先大體的瞭解下需要的工具,apache2,glimpse,lxr。下面就正式開始搭建我們自己的lxr.
一、安裝apach2:
sudo apt-get install apache2
二、安裝glimpse:
先去網站下載最新的原始碼glimpse-latest.tar.gz,然後解壓到目前的目錄下
tar -xvgf glimpse-latest.tar.gz
再接著進入解壓後的目錄下,比如我的是:
cd glimpse-4.18.6/
在編譯之前,首先看看你的機器上是否已經安裝了flex,因為編譯glimpse的時候需要這個軟體。如果沒有的話,那麼進行安裝:
sudo apt-get install flex
接著進行編譯:
./config
make
sudo make install
執行完上面的步驟後,將產生的glimpse glimpseindex 拷貝到/bin目錄下:
cd /bin
sudo cp glimpse glimpseindex /bin
三、安裝lxr
sudo apt-get install lxr
建立/usr/share/lxr/http/.htaccess檔案
在裡面增加如下內容:
<Files ~ (search|source|ident|diff|find)$>
SetHandler cgi-script
</Files>
四、複製linux原始碼
去linux官方網站下載最近的核心代碼(當然,以前的也可以)
複製linux原始碼到/usr/share/lxr/source
sudo cp /home/huangwei/Download/linux-2.6.33.2.tar.bz2 /usr/share/lxr/source
解壓:
tar xvjf linux-2.6.33.2.tar.bz2
重新命名解壓後的檔案夾
sudo mv linux-2.6.33.2 2.6.33
五、產生資料檔案
cd /usr/share/lxr/source
產生關鍵字交叉索引資料庫
sudo genxref 2.6.33/
接下來要等待一段比較長的時間,因為它要掃描檔案。
接下來,產生freetext交叉索引資料庫:
glimpseindex -H . 2.6.33/
更改許可權,使任何人都可以讀取該檔案
sudo chmod +r .glimpse*
六、修改lxr設定檔
原文:
sourceroot: /usr/share/lxr/source/$v/linux/
dbdir: /usr/share/lxr/source/dbdir
改成 :
sourceroot: /usr/share/lxr/source/2.6.33 #剛剛產生的fileidx 和xref 的地址
dbdir: /usr/share/lxr/source#產生的.glimpse_filenames這些檔案的位置
七、閱讀原始碼
重新啟動apache2
sudo /etc/init.d/apache2 restart
開啟瀏覽器,輸入http://localhost/lxr/http/source就能瀏覽本地的核心代碼了
閱讀的時候可以看到頁面頂部有
~ [ source navigation ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~
source navigation是使用者查看頁面的介面
identifier search是尋找某個變數名、結構名、函數名的介面
freetext search是尋找任何字串的介面
file search尋找某個檔案
根據Nickelzhang的建議,貼上我自己裝完後的: