Buildrootとは、組み込みに特化したLinuxイメージを手軽に作成できるツールであり、makeコマンドを中心にイメージ作成の操作を実施することができる。
本記事では、Buildrootのmakeに用意された幾つかのサブコマンドを使用して、作成したLinuxイメージの状況を可視化する手順および、その結果について紹介する。
実施環境
- Buildroot-2017.08
- イメージ作成対象はRaspi3
-
make raspberrypi3_defconfig
のみを実行後、make
コマンドでイメージを作成した環境での実施
-
Buildrootの環境構築手順については割愛する。
パッケージ依存関係
作成するイメージに組み込まれるパッケージおよびイメージ作成に必要なホストパッケージの依存関係をグラフ描画する。
実行に必要なもの
- graphviz * aptコマンド等で適宜インストールしてください
- 公式ドキュメントにも記載あり
実行方法
$ make graph-depends
グラフファイルの出力形式等はオプションでカスタマイズできるため、ドキュメントを参照
実行結果
output/graphs/graph-depends.pdf
が生成されます

濃い灰色となっているのが、イメージに組み込まれるパッケージであり、カスタマイズを行っていない初期状態のイメージでは、busyboxなどの最小限動作に必要なパッケージのみ組み込まれており、残りほとんどはホストパッケージとなっていることが確認できます。
ビルド時間
make
で各パッケージのビルド時、それぞれにかかった時間をグラフ化します。
実行に必要なもの
- python-matplotlib
実行方法
$ make graph-build
実行結果
output/graphs
配下に複数ファイルが生成されます
- build.hist-build.pdf
- 各パッケージのビルド時間をビルド実行順にヒストグラムを表示する
- build.hist-duration.pdf
- ビルド時間の長い順(ry
- build.hist-name.pdf
- パッケージ名順(ry
- build.pie-packages.pdf
- 各パッケージのビルド時間の円グラフを表示する
- build.pie-steps.pdf,
- パッケージビルド時の工程(extract, patch, configure,build...)ごとの割合の円グラフを表示する
build.hist-build

イメージのユーザランドのパッケージはbusyboxぐらいしかなく、Linuxカーネルやgccに圧倒的ビルド時間がかかっている
build.pie-steps

ほとんどがBuild時間であり、次いでconfigureに時間がかかっている。
ファイルシステム中に占めるパッケージごとのファイルサイズの割合
実行方法
$ make graph-size
実行結果
output/graphs
配下に複数ファイル生成される
- graph-size.pdf
- パッケージごとの占める割合の円グラフ
- package-size-stats.csv
- 上記のテキスト版
- file-size-stats.csv
- 全ファイルがどのパッケージなのか、どれぐらい使用しているかの情報

Linuxが大半を占めており、これはローダブルなカーネルモジュール(.koファイル)となっております。残りはbusyboxやlibcやetc配下のものと思われます。
まとめ
今回は実行対象が未カスタマイズの最小構成のものであったため、パッケージ数も少なくシンプルな結果ばかりとなりましたが、システムを組み上げていくにつれてパッケージ数も増え、イメージサイズやビルド時間のボトルネックの調査が必要となってくるケースに対しては有効な手段かと思います。