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

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

[宍道 洋 busybox同好会,@IT MONOist]
前のページへ 1|2|3       

QEMUで動かしてみよう

 それでは、出来上がったバイナリをCPUエミュレータ「QEMU」を使って動かしてみましょう。

 今回はBusyBoxのバイナリ単体では動作せず、共有ライブラリを必要とするので、QEMUに対して「-L」オプションで“~/bb_uclibc”へのパスを指定して、ライブラリを読み込めるようにする必要があります(リスト1)。

 いかがでしょうか? ちゃんと動作しましたか? 前回と変わりなく動作していると思います。うまくいった方は試しにいくつかコマンドを実行して確認してみてください。もし、動作しない場合はもう一度本稿を参考に設定などの見直しをしてみてください。


$ cd ~/bb_uclibc
$ qemu-arm bin/busybox ←「-L」オプションがない場合
/lib/ld-uClibc.so.0: No such file or directory ←ライブラリが見つからない
 
$ qemu-arm -L /home/shinji/bb_uclibc bin/busybox ←「-L」オプションを指定した場合
BusyBox v1.11.1 (2008-08-18 04:10:59 JST) multi-call binary
Copyright (C) 1998-2008 Erik Andersen, Rob Landley, Denys Vlasenko
and others. Licensed under GPLv2.
See source distribution for full notice.
 
(中略)
 
    vlock, watch, watchdog, wc, wget, which, who, whoami, xargs,
    yes, zcat, zcip
 
$ qemu-arm -L /home/shinji/bb_uclibc bin/ls -l
drwxrwxr-x    2 shinji   shinji       4096 Aug 17 19:13 bin
drwxr-xr-x    2 shinji   shinji       4096 Aug 17 18:36 lib
lrwxrwxrwx    1 shinji   shinji         11 Aug 17 19:13 linuxrc -> bin/busybox
drwxrwxr-x    2 shinji   shinji       4096 Aug 17 19:13 sbin
drwxrwxr-x    4 shinji   shinji       4096 Aug 17 19:13 usr
$ 
リスト1 QEMUに対して「-L」オプションを指定

glibcとuClibcを比較

 最後に、glibcとuClibcのそれぞれを使ってBusyBoxを構築すると何が違うのかを比較してみたいと思います。

 ここでは、それぞれのライブラリごとに静的リンク/動的リンクのBusyBoxを構築してサイズを測ってみます。今回使用したアーキテクチャは「i386」で、glibcのバージョンは「2.8」、uClibcのバージョンは「0.9.29」です。

 計測した結果は以下のようになりました(表2)。

glibc(2.8) uClibc(0.9.29)
静的リンク BusyBoxサイズ 1424.4KB BusyBoxサイズ 710.4KB
動的リンク BusyBoxサイズ 619.3KB BusyBoxサイズ 619.1KB
ライブラリサイズ 2056.6KB ライブラリサイズ 239.4KB
動的リンク合計 2675.9KB 動的リンク合計 858.5KB
表2 glibcとuClibcを比較

 まず、静的リンク/動的リンクで比較してみましょう。表2から、glibc、uClibcともに動的リンクの合計サイズよりも静的リンクした方が小さくなっていることが分かります。この結果だけを見ると「ライブラリを使わない方がサイズが小さくなってよいのではないか?」と思うかもしれませんが、ターゲットにBusyBox以外のプログラムが複数含まれる場合、すべてのプログラムを静的リンクしてしまうとかえって総ファイルサイズが増えてしまうことになります。そのため、BusyBox以外のプログラムもターゲットに複数組み込む場合は、共有ライブラリを作成して動的リンクする方がよいでしょう。

 続いて、glibcとuClibcの違いを見てみましょう。静的リンクの場合ではuClibcを使うことにより半分のサイズに抑えられています。また動的リンクの場合、BusyBox本体のサイズはほぼ一緒になっていますが、BusyBoxが必要とするライブラリ(注3)を含めた合計サイズは、glibcを使った場合と比べて、uClibcを使った場合には2MB近く小さくなっています。

 このことから、uClibcがより組み込み向けであることが分かっていただけると思います。

※注3:glibcの場合は、「/lib/ld-linux.so.2」「/lib/libc.so.6」「/lib/libm.so.6」の3つ、uClibcの場合は、「/lib/ld-uClibc.so.0」「/lib/libc.so.0」「/lib/libm.so.0」の3つが必要になります。




 今回はBusyBoxと併せて使われることの多いライブラリ「uClibc」について解説しました。さて次回は、実際に組み込み機器にBusyBox+uClibcによる環境を組み込んでいく予定です。ご期待ください!(次回に続く)

前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.