flat7th

memo/20250930

created 2025-09-30 modified 2025-09-30 
Graphviz の dot コマンドでカーネルモジュールの依存関係を図にする

スクリプト


make-module-graph.sh
#!/bin/bash

PNG_FILENAME=module-graph.png

put_header()
{
cat <<EOF
digraph G1 {
  "(module A is using)" -> "(module B)";
EOF
}

put_trailer()
{
cat <<EOF
}
EOF
}

put_main()
{
	while read MOD1 SIZE COUNT MOD2LIST
	do
		for MOD2 in $(echo $MOD2LIST| tr "," " ") 
		do
			echo "$MOD2 -> $MOD1;"
		done
	done
}

put_dot()
{
	put_header

	LINES=$(lsmod | wc -l)
	lsmod \
		| tail -n $(($LINES - 1)) \
		| put_main

	put_trailer
}

main()
{
	put_dot | \
		/usr/bin/dot -T png -o $PNG_FILENAME
}

main

実行


bash ./make-module-graph.sh

結果例


(横に大きな画像になったので一部のみ)



* 日々のメモ