連載
» 2008年09月03日 00時00分 公開

いますぐ使える! BusyBox活用術(3):スリムな相棒「uClibc」をBusyBoxで使ってみよう (1/3)

BusyBoxとセットで使われることが多い、組み込みCライブラリ「uClibc」について解説する。標準Cライブラリ「glibc」との違いとは!?

[宍道 洋 busybox同好会,@IT MONOist]

 前回「『BusyBox』の設定とコンパイルを実践してみよう」では、BusyBoxの設定項目と静的リンクによるバイナリの構築・実行について説明しました。

 今回は、BusyBoxとともに組み込みLinuxでよく使われているライブラリ「uClibc」について解説していきます。

uClibcとは?

 コンピュータ上で動作する複数のプログラムの処理には、例えば画面表示にかかわる処理や数値演算処理、文字列を扱う処理など、共通の処理がそれぞれに含まれています。そのような共通に利用可能な機能を取りまとめたものを「ライブラリ」といい、それぞれのプログラムがそのライブラリを利用することで、コードの再利用性を高め、開発の効率化やプログラムファイルサイズの縮小などを実現します(図1)。

ライブラリ 図1 ライブラリ

 また、C言語用に標準化したライブラリを「標準Cライブラリ」といい、例えばサーバやデスクトップPC向けのほとんどのLinuxシステムでは、標準Cライブラリとして「glibc(GNU C Library)」が使われています。glibcは豊富な機能を有しますが、その分“サイズが大きい”という欠点を持っています。組み込み機器でglibcを使おうとすると、glibcが提供している機能のうち一部しか使用していないのにもかかわらず、『貴重なディスクの多くがglibcで占有されてしまう』といった無駄が発生することになります……。

 そんな中、組み込み機器向けに開発されたCライブラリの1つが「uClibc」です(注1)。このuClibcはもともと、MMU(Memory Management Unit)を持たないCPU向けのLinuxである「uClinux」用に開発されたもので(注2)、glibcを使って構築するプログラムをできるだけ修正なしにコンパイル可能にすることを目的として作られました。ちなみに、現在ではuClinuxだけでなく通常のLinuxでも利用できます。

 以下に、uClibcの特長を示します。

  • glibcは少なくとも数“M”バイト程度の容量を必要とするのに対して、uClibcは数百“k”バイト程度とサイズが小さい
  • 必要な機能のカスタマイズが容易。不必要な機能を切り捨ててuClibc自体のサイズを最小化できる

 ただし、制限として、

  • glibcにある機能がすべて含まれているわけではないため、プログラムによってはそのままコンパイルできないものもある
  • uClibcのリリースバージョン間での互換性が保証されていないため、uClibcを利用するプログラムは、uClibcのバージョン変更時に再コンパイルが必要になる

などが挙げられるため、使用の際には注意が必要です。

※注1:ほかに、組み込み向けCライブラリとして、「newlib」や「dietlibc」などがあります。


※注2:「uClinux」および「uClibc」の頭に付く“uC”はそれぞれ、“u”→“μ”→“micro”、“C”→“controller”ということで、マイクロコントローラ向けであることを表しています。


uClibcの設定について

 次に、uClibcの設定項目について見ていきたいと思います。

 はじめに、uClibcをダウンロードして展開してください。すでに、連載第1回「BusyBoxをクロスコンパイルする環境を構築しよう」の解説のとおりにクロスコンパイル環境を構築している場合は、作業ディレクトリに作成した“dl”ディレクトリ内に、“uClibc-0.9.29.tar.bz2”が存在するはずです。もし、存在しないようであればuClibcのサイトから“uClibc-0.9.29.tar.bz2”をダウンロードしてください。

 続いて、作業ディレクトリで以下のコマンドを実行して、uClibcのフしァイルを展開し、“uClibc-0.9.29”ディレクトリに移動してください。

$ tar jxf dl/uClibc-0.9.29.tar.bz2
$ cd uClibc-0.9.29 

 そして、

$ make menuconfig 

を実行すると、uClibcの設定画面が表示されます(画面1)。

uClibcの設定画面 画面1 uClibcの設定画面

 以下に、画面1の設定項目について示します(表1)。

設定項目 内容
Target Architecture ターゲットのCPUアーキテクチャ
Target Architecture 
Features and Options
MMUやFPU(Floating Point number processing Unit)の有無など、アーキテクチャの機能に関するオプションやLinuxカーネルヘッダファイルの場所などの設定
General Library Settings PIC(Position Independent Code)による構築、POSIXスレッド、シャドウパスワードやタイムゾーンのサポートなど、全般的な設定
Advanced Library Settings パスワードエントリを取得する関数getpwnam()や、グループエントリを取得する関数getgrnam()で使われるバッファサイズの設定
Networking Support IPv6やRPC(Remote Procedure Call)など、ネットワーク関連の設定
String and Studio Support 文字列処理機能やロケールなど標準入出力関連の設定
Big and Tall 正規表現関連処理など、ライブラリのサイズに大きく影響する機能に関する設定
Library Installation Options ライブラリのインストール先の設定
Security options スタックの保護など、セキュリティに関する設定
uClibc 
development/debugging 
options
クロスコンパイル環境やCFLAGSなどの指定、およびデバッグオプションの設定
表1 uClibcの設定画面における項目


       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.