Codeviz 分析kernel源程序

Codeviz是一款开源的用于自动生成C/C++源程序调用关系图的工具,其主页地址为http://www.csn.ul.ie/~mel/projects/codeviz/ 。

CodeViz的实现原理是通过给GCC打补丁,而且不同版本的CodeViz对应的GCC的版本也不一致。

本文使用的是codeviz-1.0.11版本,codeviz-1.0.11.tar.gz。

解压后的目录中compiler子目录是用来存放对应版本的的gcc源码的目录。要查看Codeviz对应的GCC的版本号,查看Makefile文件。

bl25p-18:~/codeviz-1.0.11# cat  Makefile
TOPLEVEL = /root/codeviz-1.0.11
PREFIX = /usr/local
GCCVERSION = 3.4.6
PERLLIB = /usr/local/lib/perl/5.10.0
GCCGRAPH = /usr/local/gccgraph

Codeviz的安装脚本install_gcc-3.4.6.sh会自动检查安装对应的gcc,但是,我在Debian5上试验的时候对应的gcc ftp服务器无法访问,所以通过手动安装的方式来完成。

下载gcc-3.4.6.tar.gz(ftp://ftp.mirrorservice.org/sites/sourceware.org/pub/gcc/releases/gcc-3.4.6/)到codeviz解压目录下的compiler子目录下。install_gcc-3.6.4.sh会自动检查gcc的源码包是否已经在compiler子目录下。如果已经存在,它将会进行解压,并且打codeviz提供的gcc patch文件,并将其安装到指定的目录下。默认GCC安装目录是HOME/gcc-graph,可以通过给install_gcc-3.6.4.sh脚本指定参数来设置gcc的安装目录。

./install_gcc-3.4.1.sh /usr/local/gcc-graph
接下来,安装codeviz通过如下命令,
当前目录为codeviz源码包解压的后的根目录:
./configure
make
make install-codeviz (install-codeviz target会将genfull和gengraph安装到/usr/local/bin目录下)
另外,Graphviz 支持生成不同更改的调用图,在debian下可以通过aptitude install GraphViz来进行安装。

当所有的准备都完成以后,可以使用Codeviz来生成源码调用图。假设你已经下载了linux kernel源代码包,并且已经解压。
在kernel的根目录下,使用codeviz打过patch的gcc来编译kernel源代码(注意,并不需要连接)。
make CC=$HOME/gcc-graph/bin/gcc
这是对每一个被编译的源文件,会对应生成一个cdepn文件。codeviz会使用cdepn文件来生成调用图。
通过genfull来生成full.graph,这个文件时生成其它调用图的基础。
genfull -g cobjdump -o full.graph-objdump
genfull -g cdepn -o full.graph-cdepn
gengraph -t -d 5 -g full.graph-objdump  -f kswapd -o kswapd-objdump.ps
gengraph -t -d 5 -g full.graph-cdepn -f kswapd -o kswapd-cdepn.ps

生成调用图
通过gengraph 命令
Step 1: gengraph -f alloc_pages


Step 2: gengraph -d 10 -f alloc_pages


Step 3: gengraph -t -d 10 -f alloc_pages


Step 4: gengraph -t -d 10 -s "shrink_cache" -f alloc_pages


Step 5: gengraph -t -d 10 -s "shrink_cache try_to_free_pages_zone" -i "__free_pages_ok" -f alloc_pages
 

alloc_pages

参考文件

【1】http://www.csn.ul.ie/~mel/projects/codeviz/

【2】http://www.cnblogs.com/xuxm2007/archive/2010/10/14/1851086.html

原文地址:https://www.cnblogs.com/yuboyue/p/2349493.html