本章では、Armadillo-IoT を用いたシステム開発の一連の流れについて説明します。
ユーザーオリジナルアプリケーションを作成する
Atmark Distにユーザーオリジナルアプリケーションを組み込む
システムの最適化を行う
オリジナルプロダクトのコンフィギュレーションを更新する
tftpbootを利用して開発を効率化する
以降では、上記ステップについて順を追って説明します。
13.1. ユーザーオリジナルアプリケーションを作成する
ここでは、システムのメイン機能となるアプリケーションプログラムを作成する方法を説明します。ほとんどのシステムでは、ユーザーオリジナルなアプリケーションを実装するものと思います。本章では定番である「Hello world!」を例に、C言語でアプリケーションプログラムのソースコードを作成し、コンパイル、動作確認する方法について説明します。
まずは、ATDE上で動作する「Hello World!」を作成してみましょう。テキストエディタ[]にはgeditを利用します。
作成したソースコードが意図した通りに動作するか、ATDE上で動作するようにコンパイルして実行し、動作の確認をしましょう。
意図した通りに実行できましたね。では次にArmadilloが実行できるようにコンパイルを行います。
Armadilloのアプリケーションを作成するには、クロスコンパイルが基本的な手法となります。先に示している、ブートローダー、Linuxカーネル、ユーザーランドイメージもクロスコンパイルされています。
クロスコンパイルとは、別のアーキテクチャで動作する実行ファイルを作成することです。ATDEなど、通常のPCは、i386またはamd64と言われるアーキテクチャとなっています。Armadillo-IoT ではarmelというアーキテクチャが使われています。Armadillo-IoTで実行することができる実行ファイルをATDE上で作成する方法を説明します。
Armadillo-IoT 上で動作するようにコンパイルする場合は、コンパイラ(gcc)にarmelアーキテクチャ用のもの(arm-linux-gnueabi-gcc)を利用します。
Armadillo-IoT に実行ファイルを転送して動作の確認を行います。ここではファイル転送にFTPを利用します。次の例では、Armadillo-IoT のIPアドレスが「192.0.2.10」であることを想定しています。
minicomなどを利用してArmadillo-IoT にログインすると/home/ftp/pubにhelloが転送されています。転送されたばかりのファイルには実行権限がついていないため、chmodコマンドで実行権限を付与して実行してみましょう。
13.2. Atmark Distにユーザーオリジナルアプリケーションを組み込む
「ユーザーオリジナルアプリケーションを作成する」では、Armadillo-IoT 上で動作することができる実行ファイルを作成することができました。続いて、Atmark Distにそのアプリケーションを組み込み、ユーザーランドのイメージファイル(romfs.img.gz)に自動的にインストールされるように作業を行います。
はじめにhelloアプリケーションをビルドするためのMakefileを作成します。このMakefileは、Atmark Distのビルドシステムにhelloを組み込むために必要となります。テキストエディタで作成します。
Makefileが正しく作成できたかを確認するために、一度ビルドしてみましょう。ビルドにはmakeコマンドを利用します。
| |
---|
makefileの記述ルールは次のようになります。
makeコマンドに続けて入力することによりターゲットを指定することができます。ターゲットを指定しない場合は、makefileのルールで最初に記述されているターゲットが実行されます。
図13.7「hello用のMakefile」では、ターゲット指定をしない場合は、"all"ターゲットが実行されます。cleanターゲットを指定しmakeすると、一時ファイルなどが消去されます。
|
Atmark Distでは、製品(システム)固有の設定やファイルなどを製品毎にディレクトリに分けて管理されています。このディレクトリをプロダクトディレクトリといいます。アットマークテクノ製品の場合、開発セット用の標準イメージに対応するプロダクトディレクトリが製品毎に用意されています。
ここでは、Armadillo-IoTのプロダクトディレクトリをコピーしてオリジナルプロダクトを作成し、そのオリジナルプロダクトにhelloを組み込みます。オリジナルプロダクトの名前は、"my-product"とします。なお、「~/atmark-dist」を配置していない場合は、「Linuxカーネル/ユーザーランドをビルドする」を参照して配置してください。
続いて、helloをAtmark Distのビルドシステムに組み込みます。
プロダクトディレクトリ(atmark-dist/vendors/AtmarkTechno/my-product/)にあるMakefileをテキストエディタで開き、次のように34行目を追加します。
図13.7「hello用のMakefile」では、romfsディレクトリ(atmark-dist/romfs/)にファイルをインストールするためのromfsターゲットに対応していないため、ビルドされた実行ファイルは作成されますが、ユーザーランドイメージに実行ファイルがインストールされることはありません。ユーザーランドイメージに自動的にインストールされるように、romfsターゲットを追加しましょう。ここでは、Armadillo上の/usr/bin/ディレクトリ以下にhelloがインストールされるように記述してみます。(18-19行目を追加)
これで、my-productにhelloが追加されました。my-productをビルドして、イメージファイルを書き換えてみましょう。「Linuxカーネル/ユーザーランドをビルドする」の手順の中で、AtmarkTechno Productsに"Armadillo-IoTG-Std"を選択している箇所では"my-product"を選択します。ビルドして出来上がったユーザーランド(romfs.img.gz)をフラッシュメモリに書き込むには、12章フラッシュメモリの書き換え方法を参照してください。
フラッシュメモリを書き換えた後Armadilloを再起動すると、/usr/bin/helloが組み込まれたユーザーランドとなっています。
ここでは、システム開発の最終段階の最適化について説明します。
ベースとしたArmadillo-IoT では、システムに不要なアプリケーションなどが含まれていると思います。不要なアプリケーションを省くことでイメージファイルがスリムになり起動速度が向上したり、空きメモリ容量が増えるなどのシステムの負荷が軽減します。
また、セキュリティーについても考慮すべきでしょう。Armadilloのデフォルトのrootパスワードは、「root」となっています。デフォルトのままにしてしまうと簡単にハッキングされてしまう恐れがあります。
必要のないアプリケーションを削除したり、パスワードの変更を行うには、make menuconfigなどを行いシステムを変更します。
手順13.1 必要のないアプリケーションを削除する
make menuconfigを行い「Kernel/Library/Defaults Selection --->」を選択します。
「Customize Vendor/User Settings」を選択して"Exit"を2回して「Do you wish to save your new kernel configuration?」で"Yes"とします。
Userland Configurationメニューが表示されます。
削除するアプリケーションにカーソルを合わせて"N"を押下し選択を解除してください。そして、"Exit"を2回選択して「Do you wish to save your new kernel configuration?」で"Yes"とすることで設定を保存することができます。
手順13.2 rootパスワードを変更する
手順13.1「必要のないアプリケーションを削除する」と同様に、make menuconfigを使い「Userland Configuration」メニューを開きます。
「Vendor specific --->」を選択します。
「change root passwd」を選択すると、rootパスワードを変更することができます。
13.4. オリジナルプロダクトのコンフィギュレーションを更新する
make menuconfigで修正を加えたコンフィギュレーションは、一時ファイルとして保存されています。一時ファイルはmake cleanやmake distcleanなどでAtmark Distをクリーンアップした場合に削除されてしまいます。再度コンフィギュレーションを復元するためには、一からコンフィギュレーション手順を再現しなくてはなりません。
Atmark Distをクリーンアップした場合でも、設定したコンフィギュレーションを恒久的に復元させることができるように、プロダクトのデフォルトコンフィギュレーションを上書き更新する手順を説明します。
手順13.3 プロダクトのデフォルトコンフィギュレーションを上書き更新する
手順13.1「必要のないアプリケーションを削除する」と同様に、make menuconfigを使い「Kernel/Library/Defaults Selection」メニューを開きます。
「Update Default Vendor Settings」を選択しておきます。「Customize Vendor/User Settings」でコンフィギュレーションを変更した場合などに、自動的にプロダクトのデフォルトコンフィギュレーションが上書き更新されるようになります。
「Update Default Vendor Settings」を選択した場合に更新されるデフォルトコンフィグファイルを表13.1「デフォルトコンフィグファイル」に示します。
表13.1 デフォルトコンフィグファイル
対象 | デフォルトコンフィギュレーションファイル |
---|
Linuxカーネル | [プロダクトディレクトリ]/config.linux-3.x[] |
Userland | [プロダクトディレクトリ]/config.vendor |
Busybox-1.20.2 | [プロダクトディレクトリ]/config.busybox-1.20.2 |
| Linuxカーネルのデフォルトコンフィグレーションがmake distcleanで削除されないようにするには |
---|
デフォルトコンフィグファイルのうち、Linuxカーネルのデフォルトコンフィグレーションは、make distcleanを実行すると削除されるようになっています。この挙動が望ましくない場合は、[プロダクトディレクトリ]/Makefile の distclean ターゲットで config.$(LINUXDIR) を削除しないよう、次のように書き換えてください。
|
13.5. tftpbootを利用して開発を効率化する
開発やデバッグ中など頻繁にビルドを行う場合、カーネルイメージ(linux.bin.gz)、ユーザーランドイメージ(romfs.img.gz)をビルドするたびにフラッシュメモリに書き込むのは非常に効率が悪いです。
このような場合、tftpboot を利用すると便利です。
Hermit-At ブートローダーは、TFTP サーバー上に配置されたカーネルまたはユーザーランドのイメージを取得し RAM 上に展開したあと起動する、tftpboot 機能を有しています。
tftpboot 機能を使用すると、フラッシュメモリにイメージを書くことなく起動できるため、開発の初期段階などイメージの更新が頻繁に行われる際に、効率よく作業することができます。
TFTP サーバーのルートディレクトリに、カーネルイメージとユーザーランドイメージを配置してください。
Armadillo-IoT にイメージを提供するTFTP サーバーは、Armadillo-IoT のLAN インターフェース(CON6)が接続されているネットワーク上に存在する必要があります。3G、無線LANまたはUSB接続のEthernetアダプタ等を使うことはできません。
| |
---|
ATDE では、標準状態で TFTP サーバー (atftpd) が動作しています。/var/lib/tftpboot ディレクトリにファイルを置くことで、TFTP によるアクセスが可能になります。 |
Armadillo-IoT を保守モードで起動してください。
作業用 PC のシリアル通信ソフトウェアを使用して、次に示すコマンドを入力すると、TFTP サーバー上に配置されたカーネルイメージ、ユーザーランドイメージから起動します。
カーネルとユーザーランドのイメージは、どちらか一方だけ、もしくは両方指定できます。
TFTP サーバーの IP アドレスが 192.168.10.1、Armadillo-IoT の IP アドレスが 192.168.10.10で、カーネルイメージのファイル名が linux.bin.gz
、ユーザーランドのイメージのファイル名が romfs.img.gz
の場合、以下のようになります。
13.5.3. ブートデバイスを TFTP サーバーに設定
setbootdevice コマンドでブートデバイスを TFTP サーバーに設定した場合、設定は保存され、起動時に毎回カーネルもしくはユーザーランドイメージを TFTP サーバーから取得するようになります。
TFTP サーバーの IP アドレスが 192.168.10.1、Armadillo-IoT の IP アドレスが 192.168.10.10で、カーネルイメージのファイル名が linux.bin.gz
、ユーザーランドのイメージのファイル名が romfs.img.gz
の場合、以下のようになります。
setbootdevice コマンドの実行後、bootコマンドを実行するか、オートブートモードでArmadillo-IoTを再起動すると、TFTP サーバー上に配置されたカーネルイメージ、ユーザーランドイメージから起動します。
ブートデバイスをデフォルト(flash)に戻すには、次に示すコマンドを実行します。