アプリケーションの開発

μClinuxは実装できましたが、やはり組み込み機器ですので最終製品に特化したアプリケーション開発は必須となります。Linux上で動作するアプリケーションのビルド方法として、カーネルのビルド時に同時にビルドする方法とアプリケーション単独でビルドする方法の2通りの方法がありますが今回は後者の方法で”helle_world”アプリケーションをビルドからデバッグ、リリース版のビルドについて図 8で示した手順に従い紹介します。

 

図8 アプリケーションのデバッグビルドとデバッグ手順

 

 

アプリケーションのデバッグビルド

まず、アプリケーションのソースコード(hello_world.c)を用意します。

次に、アプリケーションをビルドしますが、デバッグ情報を付加するため、”-g”オプションをつけて、”nios2-linux-uclibc-gcc”を実行します。

なお、μClinuxの場合はフラットバイナリ形式の実行ファイルにする必要があるため、オプションに”–elf2flt”を付けます。

エラーがなく終了すれば、実行可能ファイル(hello)とデバッグ情報ファイル(hello.gdb)が生成されます。出来上がった実行可能ファイル(hello)をμClinux上の実行パスの通っているディレクトリへftp等で転送します。

 

 

アプリケーションのデバッグ

次に、”gdbserver”とインサイトを使用したアプリケーションのリモートデバッグの方法について紹介します。

“gdbserver”は”vfork”システムコールを使用してデバッグ対象のプログラムを子プロセスとして生成します。さらに”ptrace”システムコールを使って、レジスタやメモリの読み書き、ブレークポイントの設定などの機能を実現しています。

“gdbserver”のソースコードは”gdb”ソースパッケージに含まれており、CPUアーキテクチャごとにそれぞれ構築する必要があります。このため、ネクスト・ディメンションではμClinux上で動く、Nios II用の”gdbserver”を移植し、アプリケーションデバッグ環境を構築しました。

今回の移植では主に以下の部分の追加、修正を行っております。

   ・uClinux-dist内のptrace.cの修正

   ・break_handler、exception_handlerの追加、修正

   ・gdbserver内のCPU依存部の開発

   ・JTAG_Debugモジュールの削除等、ハードウェアの修正

詳細については以下を参照してください。(http://www.next-dimension.co.jp/Nios2uClinux.html)図 9にアプリケーションデバッグ環境を示します。

 

図9 アプリケーションデバッグ環境

 

まず、μClinux上で”gdbserver”コマンドにホストPCのIPアドレス、ポート番号、デバッグ対象のアプリケーション(ここでは”hello”)のオプションを付けて、実行します。

”gdbserver”は”hello”プロセスを生成し、停止状態にします。その後、”gdbserver”はホストPC(デバッガ)から接続されるのをまちます。

 

次に、”nios2-elf-insight”コマンドでインサイトデバッガを起動し、デバッグビルドで生成された”hello.gdb”ファイルを開きます。“File ⇒ Target Setting”から“Target Selection”画面を起動し、以下のように設定し、Runボタンをクリックします。

   ・target:“Remote/TCP”

    ・Hostname:<ターゲットのIPアドレス>

    ・Port:<nios2-gdb-server.exeで指定したポート番号>

    ・More Option ⇒ Download Programのチェックをはずす

“gdbserver”とインサイトデバッガが接続され、main関数の先頭行でプログラムが停止します。なお、Linux上ではアプリケーションがメモリ上のどのアドレスにロードされるかは分からないので、接続処理中でアプリケーションのベースアドレスの設定が行われます。

 

図10 アプリケーションデバッグ画面

 

通常はデバッガからプログラムをダウンロードしますが”gdbserver”を使用する場合は、既に”gdbserver”によって、プロセスが生成されているため、インサイトデバッガからプログラムのダウンロードは行わないということに注意してください。

 

 

アプリケーションのリリースビルドと実行

アプリケーションのデバッグが終了し、最終製品の組み込む段階までくると次はリリースビルドを実行する必要があります。リリースビルドの方法は”nios2-linux-uclibc-gcc”実行時に付加した”-g”オプションを付けずにビルドします。生成された実行可能ファイル(hello)を「アプリケーションのデバッグビルドとデバッグ」項で解説した方法でμClinuxの/binディレクトリにコピーし、カーネルをリビルドします。

μClinux起動後に”hello”を実行し、正常に動作すれば、アプリケーション開発は終了となります。図 11に“hello”の実行結果を示します。

 

図11 helloの実行

 

Nios II のMPU/MMUサポート

本年2QにリリースされたVer8.0で、Nios IIはMPU(Memory Protection Unit)とMMU(Memory Management Unit)を正式にサポートを開始しました。これらの機能を活用するにはLinux系OSとの組合せが最適です。冒頭でご紹介した2種類のLinuxもいずれは対応してくると思いますが、自力での移植含め今後検討していこうと考えています。

 

おわりに

前回と2回に渡りNios IIのソフトウェアに関して、東京計器工業の福島さんに解説して頂きました。Linux系OS の良いところは、オープン・ソースで誰でも自由に使えることや、コミュニティで作られているドライバなどを利用できることです。もちろん動作確認は自己責任となりますので、自社で設計したボードに移植するにはそれなりの工数が必要ですが、ネットワーク系のプロトコル・スタックやサーバ・アプリケーションを利用できるのは、かなりの魅力と言えるでしょう。

自分で移植するのは面倒だが興味があるという方は、弊社までお気軽にお問い合わせください。今回使用したNios II 開発キットCyclone II エディション以外にも複数の開発キット上でデモが可能です。

 

ソフトコアCPUはその論理からツールサポートまで、様々なニーズに対応出来るように考えられていますので、これをうまく活用することがユーザの醍醐味なのです。

 「ユーザオリエントなSoC(System On Chip)をミニマムオーダ1個から実現できる」ソフトコアCPU+FPGAを、是非皆さんも体験してみて下さい。

 

次回は、いよいよ最終回として総括をする予定です。