Codeviz生成linux内核的函数调用图

来源:互联网 发布:mac桌面壁纸超高清 编辑:程序博客网 时间:2024/04/28 04:35

Codeviz生成linux内核的函数调用图,以alloc_pages函数为例。

首先是编译内核,这里我们的目的是查看函数调用关系,并非安装新内核,所以直接
进行配置编译:
1.sudo apt-get installncurses-dev(这样才可以运行make menuconfig,否则会出错)

2.make menuconfig

3.make CC=/usr/local/gcc-graph/bin/gcc bzImage

4.make CC=/usr/local/gcc-graph/bin/gcc modules

 

生成调用图

  genfull -s "mm include/linuxdrivers/block arch/i386 fs init lib kernel net ipc"这里使用了-s选项,虽然仍然会产生冲突,但是对于kernel的基本部分来说多数还是没有冲突的。这里的选择也是为了自己将来分析kernel用,你可以根据自己的需要来生成full.graph。

生成了full.graph后调用gengraph生成alloc_pages的函数调用图,这里我们先直接使用项目网站上使用的命令,然后再进行解释:

gengraph -f alloc_pages -d 5 -t -s"buffered_rmqueue out_of_memory try_to_free_pages numa_node_id" -i"cpuset_zone_allowed" --output-font="Arial" --output-type="png"

 

 

使用 Daemon/Client 模式:

当full.graph很大时,大量的时间花费到读取输入文件上了,例如kernel的full.graph 是很大的,前面生成的大约有15M,这还不是全部内核的函数调用分析信息。为了节省时间,可以将gengraph以daemon方式运行,这要使用-p选项:

gengraph -p -g full.graph

该命令返回时gengraph以daemon方式运行,同时在/tmp目录下生成了codeviz.pipe文件。

要生成函数调用图,可以使用-q选项:

gengraph -q -t -d 5 -f alloc_pages

要终止gengraph的运行,使用如下命令:

echo QUIT > /tmp/codeviz.pipe

 

0 0
原创粉丝点击