それでは、実際に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)。
次に、[Busybox Settings]−[Installation Options]の中で、「BusyBox installation prefix」を設定します(画面5)。
デフォルトでは、現在のディレクトリに“_install”というディレクトリを作成して、その中にインストールします。画面5では、ホームディレクトリの下の“bb_static”というディレクトリにインストールするようになっています。
そのほか、[Linux System Utilities]内では、fdiskの「Support over 4GB disks」、およびmountの「Support mounting NFS file systems」を無効にしてください(注4)。
以上で設定は終了です。[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 (以下略)
続いて、出来上がったBusyBoxをCPUエミュレータである「QEMU」で実行して確認してみましょう(注5)。
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)。
# echo 0 > /proc/sys/vm/mmap_min_addr
を実行する必要があります。
今回はBusyBoxの設定方法に関する解説と静的なバイナリの構築を行いました。さて、次回は、BusyBoxとともに使われることが多いライブラリ「uClibc」について説明します。ご期待ください!(次回に続く)
Copyright © ITmedia, Inc. All Rights Reserved.