連載
» 2008年08月04日 00時00分 公開

「BusyBox」の設定とコンパイルを実践してみよういますぐ使える! BusyBox活用術(2)(2/2 ページ)

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

BusyBoxをコンパイルしてみよう

 それでは、実際にBusyBoxをコンパイルしていきましょう。今回は、デフォルトで設定されているアプレットを含んだ静的なバイナリを構築してみます。

 まず、前回構築したクロスコンパイル環境への実行パスを設定していない場合は、前回の解説を参考にクロスコンパイラやリンカなどのあるディレクトリまでのパスを追加しておきましょう。


$ PATH=$PATH:/home/shinji/cross/usr/bin 

 そして、BusyBoxの設定を行います。ここではいったんデフォルトの設定を行った後、テキストメニュー方式で設定を変更していくことにします。

$ make defconfig
$ make menuconfig 

 メニューが表示された後、[Busybox Settings]−[Build Options]を選択します。この中では、「Build BusyBox as a static binary」で静的な構築を有効に、「Cross Compiler prefix」でクロスコンパイラやリンカなどプレフィックス(例えば、ARMの場合は「arm-linux-」など)を設定します(注2)。また、「Build with Large File Support」は、ここでは無効にしておきます(注3)(画面4)。

※注2:プレフィックスは、以下のコンパイル実行時に「make CROSS_COMPILE=arm-linux-」として指定することもできます。


※注3:前回構築したクロスコンパイル環境では、「Large file support」を有効にしていないためです。


[Build Options]の設定 画面4 [Build Options]の設定

 次に、[Busybox Settings]−[Installation Options]の中で、「BusyBox installation prefix」を設定します(画面5)。

 デフォルトでは、現在のディレクトリに“_install”というディレクトリを作成して、その中にインストールします。画面5では、ホームディレクトリの下の“bb_static”というディレクトリにインストールするようになっています。

[Installation Options]の設定 画面5 [Installation Options]の設定

 そのほか、[Linux System Utilities]内では、fdiskの「Support over 4GB disks」、およびmountの「Support mounting NFS file systems」を無効にしてください(注4)。

※注4:前回構築したクロスコンパイル環境では、「Large file support」および「RPC support」を有効にしていないため、これらが有効のままだとコンパイル中にエラーが発生します。


 以上で設定は終了です。[Exit]を複数回選択し続けて終了してください。

 後は、コンパイルおよびインストールです。以下のコマンドを実行してください。

$ make
$ make install 

 これで、先ほど「BusyBox installation prefix」で設定したディレクトリ内に、“bin”“sbin”“usr/bin”“usr/sbin”の各ディレクトリが作成され、インストールされます。

 例えば、“bin”ディレクトリ内を見てみると約870kbytesの静的リンクされたbusyboxと、多くのbusyboxへのリンクができているのが分かります。

$ cd ~/bb_static
$ du
4       ./usr/bin
4       ./usr/sbin
12      ./usr
860     ./bin
4       ./sbin
880     .
$ file bin/busybox
busybox: ELF 32-bit LSB executable, ARM, version 1, statically linked, stripped
$ ls -l bin
total 856
lrwxrwxrwx 1 shinji shinji      7 Jul 20 01:31 addgroup -> busybox
lrwxrwxrwx 1 shinji shinji      7 Jul 20 01:31 adduser -> busybox
lrwxrwxrwx 1 shinji shinji      7 Jul 20 01:31 ash -> busybox
-rwxr-xr-x 1 shinji shinji 870896 Jul 20 01:31 busybox
lrwxrwxrwx 1 shinji shinji      7 Jul 20 01:31 cat -> busybox
lrwxrwxrwx 1 shinji shinji      7 Jul 20 01:31 catv -> busybox
lrwxrwxrwx 1 shinji shinji      7 Jul 20 01:31 chattr -> busybox
 
 
(以下略) 

QEMUで動かしてみよう

 続いて、出来上がったBusyBoxをCPUエミュレータである「QEMU」で実行して確認してみましょう(注5)。

※注5:QEMUのインストールや簡単な使い方については連載第1回「BusyBoxをクロスコンパイルする環境を構築しよう」を参考にしてください。


 QEMUでBusyBox本体を実行するとUsageが、リンクを実行すればそれぞれの機能が動作します(ただし、root権限を必要とする処理を行うコマンドなど、動作できないものもいくつかあります)。

$ qemu-arm bin/busybox
BusyBox v1.11.1 (2008-07-20 01:16:09 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 bin/ls -l
drwxrwxr-x    2 shinji   shinji       4096 Jul 19 16:31 bin
lrwxrwxrwx    1 shinji   shinji         11 Jul 19 16:31 linuxrc -> bin/busybox
drwxrwxr-x    2 shinji   shinji       4096 Jul 19 16:31 sbin
drwxrwxr-x    4 shinji   shinji       4096 Jul 19 16:31 usr
$ qemu-arm usr/bin/id
uid=500(shinji) gid=500(shinji)
$ 

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

※注6:qemu-armでARMバイナリを実行する際に「mmap: Permission denied」と表示されて終了してしまうことがありますが、その場合はいったんrootユーザーで、

# echo 0 >  /proc/sys/vm/mmap_min_addr

を実行する必要があります。





 今回はBusyBoxの設定方法に関する解説と静的なバイナリの構築を行いました。さて、次回は、BusyBoxとともに使われることが多いライブラリ「uClibc」について説明します。ご期待ください!(次回に続く)

前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.