最近拿到新的開發板,需要去study各個Modules以便日後進行移植,這免不了要去trace kernel driver。但kernel source實在多如牛毛(據說已超過千萬行),所以我就在找有沒有什麼工具可以使用。doxygen以前雖然有聽過但從沒想過去使用,以前我找code的方式通常都是直接grep + find (假裝牛B),或者靠IDE,現在用了doxygen才發現原來這麼方便 。
doxygen有幾個特色:
1. 生成的document可以是線上Html格式,或者本機端的latex格式。
2. 可以匯出指定的source code路徑的檔案階層。
3. 可以建立關系圖,例如各個function的呼叫路徑(call path),或者像是UML中的
類別繼承和協作圖。
使用方式如下:
step 1 : 下載套件
- sudo apt-get install doxygen doxygen-doc doxygen-gui graphviz graphviz-doc
doxygen-gui : doxygen的GUI版本。
graphviz :
用來生成各部件之間的關係圖工具,例如網路拓蹼、軟體架構等。
step 2 : 產生一個config組態檔,檔名可以隨便取。
- doxygen -g MyDoxygen.config
step 3 : 設定config組態檔
需要將組態檔的設定由NO改為YES,才會打開相應的功能,對我來說我想看
的是function的呼叫路徑,所以以下是我的設定。
的是function的呼叫路徑,所以以下是我的設定。
EXTRACT_ALL = YES
EXTRACT_PRIVATE = YES
EXTRACT_PACKAGE = YES
EXTRACT_STATIC = YES
/*source路徑 ,不寫的話預設是當前目錄*/
INPUT = /home/jinyo/My_source
/*包含子資料目錄*/
RECURSIVE = YES
INLINE_SOURCES = YES
/*開啟Graphviz的 dot tool*/
HAVE_DOT = YES
/*產生function的呼叫與被呼叫路徑*/
CALL_GRAPH = YES
CALLER_GRAPH = YES
step 4 : 執行Cmd , 開始生成 --> doxygen MyDoxygen.config
結果如下:
1. 生成HTML格式和latex格式,但我都直接看HTML的,latex不會用。
2. 列出資料結構 ,例如:class ,struct , enum等。
3. 列出某個function所有的呼叫路徑,或者被呼叫的路徑。