II-27-8. システム資源のトレードオフを考慮した最適化

組み込みシステムにおける限られたシステム資源を考慮した最適化について、具体的な手法や対策を説明する。具体的には、フレームワークに頼らずスクラッチからの開発、C++を止めてC言語で記述、BusyBoxを利用してLinuxを最小化する、といった方法を解説する。

【学習の要点】

* 組込システムの開発では容量の制約から高機能なライブラリやフレームワークを使えないことがしばしばある。

* 同様の理由でC++言語ではなくC言語を用いることがある。

* BusyBoxやuClibcを利用することで、OSや実行コードの容量を小さくすることが組み込み開発ではしばしば行われる。

図II-27-8. BusyBoxとuClibcの利用によるメモリ使用量の削減

【解説】

1) C言語の利用事例の多さ: 組込みソフトウェア産業実態調査

* 組込みソフトウェア産業実態調査のプロジェクト責任者向け調査 (情報処理推進機構、2007年、http://sec.ipa.go.jp/download/200706es.php)によると、C言語を利用するプロジェクトが56.4%、C++言語を利用するプロジェクトが36.6%となっている。

* これは、リソース制限の厳しい組み込み機器における開発の主流は、高機能なライブラリやフレームワークの提供されているC++言語ではなく、C言語であることを示している。

2) BusyBox (II-27-6参照)

* BusyBox (http://www.busybox.net/)はGNU coreutils、util-linuxなどに入っている、Unix系OSで共通に使われるユーティリティツールを単独の小さなツールに実装したものであり、カーネルのサイズを減らすことを目的に開発されている。”The Swiss Army Knife of Embedded Linux”と称される。

* コマンドには、chmod、dd、find、kill、cp、nslookup、initなど使用頻度の高いツールの多くが含まれる。(http://www.busybox.net/screenshot.html)

* $ /bin/busybox ls と実行することで、lsコマンドと同様の結果を返す。

* 実際には、”/bin/ls -> /bin/busybox” というシンボリックリンクが張られている。

* # make menuconfig から、BusyBoxに含めるツールをグラフィカルに選択することができる。

3) uClibc

* uClibc(http://www.uclibc.org/)は組み込みLinux向けに開発されたサイズの小さなCライブラリである。

* Cライブラリの代表例であるGNU C Library (glibc)は非常に良く用いられるが、組込システムに導入するにはサイズが大きすぎるという問題があった。そのため、サイズを削減したuClibcが開発された。

* uClibcにより、glibcを使うほぼ全てのアプリケーションを実行することができる。

* # make menuconfigからuClibcに含めるライブラリをグラフィカルに選択することができる。

* glibcを使うアプリケーションからuClibcを使うように変更するためには、ソースコードを再コンパイルすればよい。

* uClibcは通常のLinuxとMMUの無いLinux (uClinux、II-27-4参照)の双方をサポートしている。

4) buildrootツール(http://buildroot.uclibc.org/)を利用することでBusyBoxとuClibcを組み合わせたシステムを容易に構築する事ができる。

OSS Course Naviのコンテンツは IPA OSS モデルカリキュラムを基としています。