codeviz是一款開源的用於自動生成c/c++源程式呼叫關係圖的工具,其主頁位址為 。
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伺服器無法訪問,所以通過手動安裝的方式來完成。
./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來進行安裝。
在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參考檔案
分析kernel的initcall函式
先來看看這些initcall函式的宣告 include linux init.h initcalls are now grouped by functionality into separate subsections.ordering inside the subsections is deter...
分析kernel的initcall函式
分析kernel的initcall函式 先來看看這些initcall函式的宣告 include linux init.h initcalls are now grouped by functionality into separate subsections.ordering inside the ...
編譯核心 kernel
學習linux就從核心編譯開始,現在就讓我們邁出第一步,下面記錄編譯過程 以下操作均在root下完成 1 準備工作 根據自己機器的硬體情況,選擇核心編譯配置選項,在這裡我使用的是預設配置 make menuconfig後直接儲存退出,生成.config檔案 具體配置可以參考金步國先生翻譯的資料 li...