最近拿到新的开发板,需要去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的呼叫路径,所以以下是我的设定。
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所有的呼叫路径,或者被呼叫的路径。
参考 :