前回はBusyBoxの概要について説明しました。今回は実際に自作のアプリケーションをBusyBoxに追加する方法を紹介します。
独自のアプリケーションの追加
組込み対象プログラム
T-SH7706LSRは制御用組込みボードコンピュータであるので、直接にハードウェアを叩きI/O制御をする独自のアプリケーションプログラムを追加しています。
T-SH7706LSRにはLEDが付属していますので、具体的にはT-SH7706LSRにはLEDを点滅させるような直接にハードウェアを叩きI/O制御をする独自のアプリケーションプログラムを追加してみます。もととなるプログラムはリスト1となり、コマンド名はledで、第1引数の回数だけLEDが点滅するという仕様となっています。基本的にはリスト1をBusyBoxに組込むわけですが、このままではBusyBoxに組み込むことができないので、BusyBoxに組み込める形式に変更をします。
個別アーキテクチャに依存するヘッダは別ですが、基本的にはヘッダの定義が不要なので、ヘッダ定義をとり除き、その代わりlibbb.hを定義します。
また、main関数も
というように変更し、MAIN_EXTERNALLY_VISIBLE属性を追加します。
戻り値に関してもBusyBoxではいろいろな定義がありますが、成功の値はEXIT_SUCCESS、失敗の値はEXIT_FAILUREとなります。そのようにして変更をしたプログラムがリスト2となります。
今回はリスト2のプログラムを、BusyBoxの中にmyappsというフォルダを新規作成して入れることにします。
コンパイル構成設定系統
まず、トップフォルダにあるConfig.inでは、カテゴリー分類されたフォルダ内にあるConfig.inを指定する場所に myappsのフォルダを追加します(リスト3)。
そして、コンパイル構成設定のメニューはカテゴリー分類されたmyappsフォルダ内である構成設定のメニューをConfig.srcに記述します。内容はリスト4となります。
メニュー名はMy ApplicationsでINSERT以下にメニュー内容を記述します。
メニューでのledコマンドの名称はLEDとし、ledコマンドは構成設定で組込みか外すかの選択のみなので、ledコマンドの選択型はboot型とし、デフォルトでは選択とし、最後にヘルプテキストを記述します。
コンパイル実行系統
まず、トップフォルダにあるMakefileではカテゴリー分類されたフォルダ内であるmyappsを追加します(リスト5)。
そして、コンパイル実行内容はカテゴリー分類されたmyappsフォルダ内であるコンパイル実行内容をKbuild.srcに記述し、内容はリスト6となります。
コンパイル実行内容はオブジェクトファイル名であるled.oのみを追加します。
リンク系統とヘルプテキスト系統
個別のコマンドの実行コードをBusyBox本体にリンクさせるには、BusyBoxソースファイル中のincludeフォルダ内にあるapplets.src.hというファイルにBusyBox本体にリンクさせるための個別のコマンドの実行コードの内容を登録しますので、ledコマンドをアプレットとしてリスト7のようにリンク内容を追加します。
第1引数はコマンド名でそのままledと指定し、第2引数は通常の実行ファイルである _BB_DIR_USR_BIN を指定し、第3引数では特に特権ユーザで実行する必要もないので、_BB_SUID_DROPと指定をします。個別のコマンドのヘルプテキストは、BusyBoxソースファイル中の includeフォルダ内にある usage.src.h というファイルにリスト8のようにヘルプテキスト内容を登録します。
ledコマンドでは2つのヘルプテキストを記述し、led_trivial_usageは簡単なヘルプテキスト、led_full_usageは詳細なヘルプテキストを記述します。ヘルプテキストが不要であったとしても、このヘルプテキストがないとコンパイルができないので、適当に何らかのテキストを入れるようにしなければなりません。
コンパイル
新規にコマンドを追加した場合は、以下のようにBusyBox自体を再構成しなおします。
あとは従来と同じに作業をします。
構成設定ではledコマンドが追加されたかどうかを以下のようにして確認します。
トップメニューでは図1のように新規項目である「My Applications」があるかどうかを確認し、そのメニューに入ります。
そして、図2のように「led」のメニューが選択されていることを確認します。
コンパイルとインストールは以下のようにして作業は終了です。
次回は
次回はBusyBoxベースでのネットワーク構築について解説します。