連載
» 2009年09月08日 00時00分 公開

いますぐ使える! BusyBox活用術(7):BusyBoxを拡張してアプレットを追加する方法【後編】 (1/2)

作成したアプレットのひな型に、「mtd_debug」コマンドの中身を移植する。また、実践で役立つアプレットのチューニングについても解説。

[中村 雄一 busybox同好会,@IT MONOist]

 前回「BusyBoxを拡張してアプレットを追加する方法【前編】」では、フラッシュメモリを扱うコマンド群「mtd-utils」の中の「mtd_debug」コマンドをBusyBoxに移植することを目標に、「mtd_debug」アプレットのひな型の作成までを行いました。

 今回は前回紹介し切れなかった(4)アプレットの中身の記述・移植と、(5)アプレットのチューニングについて紹介していきます。



環境を準備する

 早速、前回作成した「hello」と表示するだけの「mtd_debug」アプレットのひな型に、「mtd_debug」コマンドの中身を移植していきましょう。

 なお、環境についてですが、本稿では動作をすぐに確認できるようにPC(Ubuntu 8.10)上でアプレットを実行しています。また、フラッシュメモリについては、「nandsim」というフラッシュメモリのシミュレータを使って、PCのRAM上に仮想的に構築しています。「nandsim」を利用するための手順は以下のとおりです。

フラッシュメモリのシミュレータ「nandsim」の準備

 Linuxカーネルには、「nandsim」という、NANDフラッシュメモリのシミュレータが標準で入っています(前述のとおり今回はこれを利用します)。

 まず、フラッシュメモリにアクセスするために必要なデバイスファイルを以下のコマンドで作成します(以下、すべてrootユーザーで実行します)。

# mknod /dev/mtd0 c 90 0 

 次に、nandsimカーネルモジュールを以下のコマンドでロードします。

# modprobe nandsim 

 このカーネルモジュールは、RAM上に仮想的なNANDフラッシュメモリを構築します。カーネルのメッセージバッファの内容を表示する「dmesg」コマンドで、カーネルメッセージを確認してみると、以下のように128Mbytesの仮想的なNANDフラッシュメモリが作られていることが分かります。

Creating 1 MTD partitions on "NAND 128MiB 1,8V 8-bit":
0x00000000-0x08000000 : "NAND simulator partition 0" 

(4)アプレットの中身の記述・移植

 それでは、「mtd-utils」の「mtd_debug」コマンドをBusyBoxに移植します。まずは、「mtd-utils」のソースコードを以下より入手し、展開してください。

 展開してできた「mtd-utils-1.2.0」ディレクトリの中にある「mtd_debug.c」というファイルが、「mtd_debug」コマンドのソースコードです。

 「mtd_debug.c」のソースコードを眺めてみると、

#include <mtd/mtd-user.h> 

という行があります。この記述から、“どうやら「mtd-utils」の中の「include/mtd」以下のヘッダがコンパイルに必要そうだ”という推測ができます。今回は作業を簡略化するためにこのヘッダを「/usr/include」にコピーすることにします。

# cp mtd-utils-1.2.0/include/mtd /usr/include/ -a 

 では、「mtd-utils」の「mtd_debug.c」の処理を、BusyBoxの中の「mtd_debug_main」関数に移植していきます。手順は、移植対象のmain関数を、<アプレット名>_main関数に置換して、#include "libbb.h"を追記するだけです。これでとりあえずの移植は完了です。

 実際に移植してみましょう。はじめに、「mtd-utils」の「mtd_debug.c」をBusyBoxの「mtd-utils」ディレクトリ以下にコピーします。そして、コピーした「mtd_debug.c」のソースコードの中からヘッダファイルをインクルードしている記述部分を見つけて、以下のように、#include "libbb.h"を追記します。

(中略)
#include <fcntl.h>
#include <mtd/mtd-user.h>
#include "libbb.h"  ←この行を追加 

 そして、main関数を以下のように「mtd_debug_main」に置換します。

int main (int argc,char *argv[]) 
変更前:

int mtd_debug_main (int argc,char *argv[]) 
変更後:

 「make menuconfig」で「mtd_debug」を選択し、BusyBoxをコンパイルします。警告がいくつか表示されますが、コンパイルは成功します。

「mtd_debug」アプレットの動作確認

 それでは、移植した「mtd_debug」アプレットを使ってみましょう。

 以下のように、「mtd_debug info <フラッシュメモリのデバイスファイル名>」を実行してみてください。「/dev/mtd0」がNANDフラッシュメモリであるとか、容量は128Mbytesであるといったフラッシュメモリに関する情報が出力されるはずです。

$ ./busybox mtd_debug info /dev/mtd0
mtd.type = MTD_NANDFLASH
mtd.flags = MTD_CAP_NANDFLASH
mtd.size = 134217728 (128M)
mtd.erasesize = 16384 (16K)
mtd.writesize = 512
mtd.oobsize = 16
regions = 0 

 ここまでで、ひとまず動作するアプレットを移植(追加)できました。

       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.