buildroot

Buildrootで作成したLinuxシステムイメージの状況を可視化する

More than 1 year has passed since last update.

Buildrootとは、組み込みに特化したLinuxイメージを手軽に作成できるツールであり、makeコマンドを中心にイメージ作成の操作を実施することができる。

本記事では、Buildrootのmakeに用意された幾つかのサブコマンドを使用して、作成したLinuxイメージの状況を可視化する手順および、その結果について紹介する。

実施環境

  • Buildroot-2017.08
  • イメージ作成対象はRaspi3
    • make raspberrypi3_defconfigのみを実行後、makeコマンドでイメージを作成した環境での実施

Buildrootの環境構築手順については割愛する。

パッケージ依存関係

作成するイメージに組み込まれるパッケージおよびイメージ作成に必要なホストパッケージの依存関係をグラフ描画する。

実行に必要なもの

実行方法

$ make graph-depends

グラフファイルの出力形式等はオプションでカスタマイズできるため、ドキュメントを参照

実行結果

output/graphs/graph-depends.pdfが生成されます

dep-graph.PNG

濃い灰色となっているのが、イメージに組み込まれるパッケージであり、カスタマイズを行っていない初期状態のイメージでは、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

timepkg.PNG

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

build.pie-steps

timestep.PNG

ほとんどがBuild時間であり、次いでconfigureに時間がかかっている。

ファイルシステム中に占めるパッケージごとのファイルサイズの割合

実行方法

$ make graph-size

実行結果

output/graphs配下に複数ファイル生成される
* graph-size.pdf
* パッケージごとの占める割合の円グラフ
* package-size-stats.csv
* 上記のテキスト版
* file-size-stats.csv
* 全ファイルがどのパッケージなのか、どれぐらい使用しているかの情報

fssize.PNG

Linuxが大半を占めており、これはローダブルなカーネルモジュール(.koファイル)となっております。残りはbusyboxやlibcやetc配下のものと思われます。

まとめ

今回は実行対象が未カスタマイズの最小構成のものであったため、パッケージ数も少なくシンプルな結果ばかりとなりましたが、システムを組み上げていくにつれてパッケージ数も増え、イメージサイズやビルド時間のボトルネックの調査が必要となってくるケースに対しては有効な手段かと思います。