開発環境
まず今回採用したuClinux-distは、理由は不明ですが大文字/小文字の違いのみで同一名称のディレクトリやファイルが複数存在しています。よってWindows + Cygwinの環境では正しく展開できませんのでLinux環境を準備する必要があります。
次にユーティリティ以外はNios II EDSのツールを使用しません。例えばビルドに使用するコンパイラは”gcc”や”binutils”等のソースパッケージから立ち上げる必要があります。これらの作業は稼働OS(ここではLinux)含めた幅広い知識が必要で、更にOSやソースファイルのバージョンの組み合わせにより正常にビルドできない場合があり、開発環境の立ち上げに思わぬ苦労をすることもあります。
幸いにもNios Community Wiki(http://nioswiki.jot.com/WikiHome)でバイナリのツールが用意されているので、今回はこれを使用します。 表 2にμClinuxの開発環境を示します。
表2 μClinuxの開発環境
ホストPC |
Targetボード |
|
ハードウェアの設計 | Quartus II SOPC_Builder |
- |
ハードウェアロジックの ダウンロード |
nios2-configure-sof (Nios II EDS) or nios2-flash-programmer (Nios II EDS) |
- |
μClinuxのビルド | nios2-linux-uclibc-gcc | - |
μClinux用アプリケーションのビルド | nios2-linux-uclibc-gcc | - |
プログラムダウンローダ | nios2-download (Nios II EDS) or nios2-flash-programmer (Nios II EDS) |
JTAG-Debug モジュール |
ターミナルソフト | nios2-terminal (Nios II EDS) | JTAG-UART |
カーネルデバッグ | nios2-elf-insight (Nios II EDS) | nios2-gdb-server |
μClinux用アプリケーションデバッグ | nios2-elf-insight (Nios II EDS) | μClinux + gdbserver |
μClinuxカーネルのビルド
では、実際に現在販売されているNios II 開発キットCyclone II エディション用にuClinux-distのビルド、実行からデバッグ方法までを紹介していきます。ここでは概要しか解説しませんが、詳細についてはhttp://nioswiki.jot.com/WikiHomeまたはCQ出版社刊の「FPGA活用チュートリアル2008/2009版:組み込みOSの活用法」を参照してください。
また、ハードウェアの設計方法はアルテラ社発行のドキュメント(Quartus II ソフトウェア・ハンドブック)等を参考にしてください。
μClinuxのビルドと実行
図 2にμClinuxのビルド手順を示します。LinuxPCでコンソールを起動し、uClinux-distを展開したディレクトリで以降の手順を実行します。

図2 μClinuxのビルド手順
make menuconfigの実行
ここでは使用するデバイスベンダーやCPUアーキテクチャ、カーネルやデバイスドライバ等の設定を行います。ここでは以下のように設定します。
・”vendor” ⇒ ”Altera”
・”target” ⇒ ”Nios2nommu”
・“kernel Version” ⇒ “linux-2.6.x”
・“Libc Version” ⇒ “None”
最後に” Default all settings(lose changes)”にチェックを入れ、変更を保存します。自動的に”.Config”ファイルを生成します。
なお、カーネル、ユーザランドの設定を変更したい場合は初回ビルド終了後に” Customize Kernel Settings”、および“Customize Vendor/User Settings”にチェックを入れます。
make vendor_hwselectの実行
ここではSOPC_builderから出力されるPTFファイルを使用して、使用するCPUやメモリの設定、ならびにアドレスマップの生成を自動的に行います。ここでは以下のように設定します。
・“--- Please select which CPU yor wish to build the kernel against:” ⇒ “altera_nios2”
・“--- Please select a device to upload the kernel to:” ⇒ “ext_flash”
・“--- Please select a device to execute kernel from:” ⇒ “ddr_sdram_0”
make、 make linux imageの実行
“make”コマンドで、μClinuxカーネル、およびルートファイルシステムをビルドします。しその後、”make linux image”コマンドで実行可能なバイナリファイル(zImage)を生成します。エラーが無く終了すれば”zImage”ファイルが生成されます。このファイルをターゲットボードにダウンロードします。
カーネルのダウンロードと実行
Nios II EDSの”Command Shell”を起動し、”nios2-download”を実行して、”zImage”ファイルをターゲットボード上のDDR_SDRAMにダウンロードします。そして、”nios2-tarminal”を実行し、μClinuxのコンソール(JTAG_UART)を起動します。図 3に実行までのイメージを示します。

図3 μClinuxの実行イメージ
コンソール上に起動メッセージ、およびプロンプトが表示されれば、μClinuxの起動は完了です。図4に起動画面を示します。

図4 μClinuxの起動
Linuxで使用できるコマンドのほかに”telnet”や”ftp”、”httpd”など、ネットワーク系のアプリケーションもある程度用意されているので一度動かしてみることをお勧めします。図 5にホストPCからブラウザでターゲットのWebサーバへ接続したときの画面を示します。

図5 ホストブラウザからWebサーバへの接続
カーネルのデバッグ
uClinux-distで提供されている機能だけを利用する場合は特にカーネルのデバッグをする必要はありませんが、デバイスドライバの開発やカスタムボードへの移植などを行う場合にはカーネルのデバッグも必要になります。私自身も開発キットに同梱されているLCDや外付けのRTC用のデバイスドライバを作りましたが旧来のprintk文を使ったデバッグでは効率的ではありません。
Linuxにおけるカーネルデバッグ方法としては“KGDB”がNios II では用意されていないため、その代用として前回紹介した”nios2-gdb-server”を使用したカーネルデバッグ方法を紹介します。
図 6にカーネルデバッグ環境を示します。

図6 カーネルデバッグ環境
Nios II EDSのコマンドシェルを起動し、”nios2-gdb-server”を実行し、ターゲットボートを接続待ち状態にします。”nios2-elf-insight”コマンドでインサイトデバッガを起動し、”uClinux-dist/linux-2.6.x”ディレクトリに生成された”linux”ファイルを開きます。“File ⇒ Target Setting”から“Target Selection”画面を起動し、以下のように設定します。
・target:“Remote/TCP”
・Hostname:“localhost”
・Port:<nios2-gdb-serverで指定したポート番号>
Runボタンをクリックするとカーネルのバイナリがダウンロードされ、カーネルの先頭で停止します。後は一般的なデバッガと同様にソースレベルデバッグが可能となります。

図7 カーネルデバッグ画面