高速アプリケーション・ローディング
JNIBの ソフトウェアを開発する工程では、 アプリケーションを構築した後、そのバイナリ・ファイルをJNIBのRAMへローディングする必要があります。 しかし、このアプリケーション・ファイルを ディバッガーの「シャレード(Charade)」から JTAG接続を経由してJNIBへローディングするのは、開発工程で何度も繰り返される作業でありながら、非常に時間がかかる工程です。 これでは、効率的な開発環境とは言えません。
この問題の解決策として、aJile社は、2008年9月2日にリリースされた「 JME CDC Runtime 」 の バージョン 5.3.01 にて、「 高速アプリケーション・ローダー (Fast application loader) 」機能を新たにサポートしました。 同バージョンの「 JME CDC Runtime 」のリリース・ノートには、この機能により、従来のJTAG接続でのローディングより 十数倍 速くローディングできる、とあります。
また、この機能に関する説明が 「 JNIB ユーザーズ・ガイド (JNIB User's Guide) 」の 「 2.6. 高速アプリケーション・ローディング (Fast Application Loading) 」にあると書かれています。
基本的な考え方としては、 転送スピードが遅いJTAG経由でのダウンロードに代わって、高速なEthernetを使ってファイルを転送してしまいましょう、というものです。 そのために、開発用PC上ではサーバーとなるソフトウェアを事前に走らせておき、JNIBからそのサーバーにネットワーク接続してファイルをダウンロードする形態をとります。 これを実現するために、JNIB側には あらかじめ 「 アプリケーション・ローダー: Application Loader (AppLoader) 」と呼ばれるソフトウェアをインストールしておきます。 また、JNIBからサーバーへの接続を指示するためには、「シャレード(Charade)」からJTAG経由でJNIBの アプリケーション・ローダーへ コマンドを送ってやります。 このコマンドを受け取ったアプリケーション・ローダーが ネットワーク経由でサーバーへの接続を開始するわけです。
この「 高速アプリケーション・ローダー (Fast application loader) 」機能は、たいへん魅力的な機能ではありますが、実際に実現しようと思っても、その方法は マニュアルからだけでは非常に判りにくくなっています。
そこで、私も試行錯誤の末 わかったのですが、この「 高速アプリケーション・ローダー (Fast application loader) 」機能を実現する方法の手順をここに具体的に示しておきます。
前提条件
- ランタイムは「 JME CDC Runtime Version 5.3.03」 以降 を利用していること。
- 環境変数が適切に設定されていること。 ( 環境変数の設定 を参照のこと )
- アプリケーションの構築は「 C:\JavaSample 」ディレクトリ で 行っていると仮定。
- 開発用のウィンドウPC も JNIB も Ethernetで 同一セグメント内に接続されており、DHCPでIPアドレスが取得できる環境にあること。
アプリケーション・ローダー: Application Loader (AppLoader) の NANDフラッシュへのロード
まず、JNIBのNANDフラッシュ・メモリへ 「 アプリケーション・ローダー: Application Loader (AppLoader) 」をインストールします。
具体的にインストールしなければならないファイルは「 C:\aJile\Host\AppLoader 」ディレクトリにある「 jnibKernel.data 」ファイルというファイルです。 この「 jnibKernel.data 」ファイルは、 aJile社からダウンロードした「 JME CDC Runtime Version 5.3.03」をインストールした段階で既に含まれていますので、新たに作成する必要はありません。
JNIBのNANDフラッシュ・メモリへ書き込む方法は、「 コンパクト・フラッシュによるNAMDフラッシュへの書き込み (2)NAMDローダーの起動 」ページの方法を参考にして下さい。 但し、CFカードへコピーするのは、「 C:\JavaSample 」ディレクトリにある「 jnibKernel.data 」ファイル ではなく、「 C:\aJile\Host\AppLoader 」ディレクトリにある「 jnibKernel.data 」ファイルです。 絶対に間違えないでください。
( 私は、どうしても 「 C:\aJile\Host\AppLoader 」ディレクトリにある「 jnibKernel.data 」ファイルを NANDフラッシュに書き込まなければならない、ということが判らず、長時間 ハマってしまいました。 )
「 AppServer.bat 」によるサーバーの起動
「 C:\JavaSample 」ディレクトリにある「Hello World」プログラムを 従来どおり、「 JEM Builder 」で アプリケーション構築してください。 このとき、「 C:\JavaSample 」ディレクトリ に「 AppServer.bat 」というバッチ・ファイルが 自動的に作成されているハズです。 このバッチ・ファイル「 AppServer.bat 」をエクスプローラーからダブル・クリックして実行しておきます。
「 AppServer.bat 」が 問題なく起動すると、このような画面が現れるハズですので、そのまま走らせておいてください。
【注意】 もし、「 AppServer.bat 」ファイルが 自動的に作成されていない場合は、お使いの ランタイムが「 JME CDC Runtime Version 5.3.03」 以降のバージョンであるかどうかを確認してください。
【注意】 他のアプリケーションをネットワーク経由でJNIBへダウンロードするには、今実行されている「 AppServer.bat 」を終了させ、ダウンロードしたいアプリケーションのディレクトリにある「 AppServer.bat 」を改めて起動する必要があります。
「シャレード(Charade)」からの 「 AppLoader.sod 」スクリプトの実行
実行用のアプリケーション・ファイルをJNIBにダウンロードするために、「 C:\JavaSample 」ディレクトリにある「 AppLoader.sod 」 というシャレード(Charade) 用のスクリプト・ファイルを実行して、 JNIB上にあるアプリケーション・ローダーを起動させます。
「シャレード(Charade)」を起動して、メニューバーから [File]-[Execute...]を選択します。
すると、「 Select command file to execute: 」ウィンドウが開いてきますので、 ディレクトリを 「 C:\JavaSample 」に移動し、「 AppLoader.sod 」を選択してから「開く」ボタンをクリックします。
すると、「シャレード(Charade)」の Consoleウィンドウには、[AppLoader]-> -- JNIB target script for starting the AppLoader [AppLoader]-> -- Apploader must be in NAND flash as the PBL [AppLoader]-> [AppLoader]-> Halt [AppLoader]-> Reset [AppLoader]-> [AppLoader]-> -- Setup PLL [AppLoader]-> set 0xFFFF00A4 0xEC6 [AppLoader]-> [AppLoader]-> -- Change Chip Select 0 to 16 bits [AppLoader]-> set 0xFFFF0080 0x54D [AppLoader]-> [AppLoader]-> -- Enable chip selects 4:7 [AppLoader]-> set 0xFFFF00A0 0x3C000 [AppLoader]-> [AppLoader]-> -- Activate the FPGA so that the FPGA RAM may be loaded [AppLoader]-> set 0x00C00000 0x3 [AppLoader]-> set 0x00C00000 0x1 [AppLoader]-> [AppLoader]-> -- Setup for bootloader [AppLoader]-> set 0 #e5 #1000078 #4144 #1000000 0 0 [AppLoader]-> set #f4 #1A0 #ff3e0280 4300 [AppLoader]-> [AppLoader]-> @setup Textio mode (tx): on [AppLoader]-> bell [AppLoader]-> [AppLoader]-> switch textio on Textio mode (tx): on [AppLoader]-> run [AppLoader]-> [AppLoader]-> -- Load symbolic info [AppLoader]-> load build.jcf 1 Reading file: build.jcf == SYSTEM =========================== =x Bin file: build_program.bin == [jemcfg 3.10.05 September 27, 2008 3:16:15 PM PDT executive] -- VM #0 ---------------------------- -- RAM start: 00000000 end: ffffffff (0 Bytes) -- ROM start: 00000000 end: ffffffff (0 Bytes) -+ Map file: JVM0.map File 'build.jcf' loaded successfully [AppLoader]-> vm.0 charadeIO active [TEXTIO.0]->JNib CF Manager Initializing [TEXTIO.0]-> [TEXTIO.0]->Servertec (R) Application/Web Server aJile Edition Version 2.1.4.1 09/04/2005 Open Source Release [TEXTIO.0]->Copyright (C) 1998-2005 Servertec. All rights reserved. [TEXTIO.0]-> [TEXTIO.0]->DHCP: Committed DHCP boot options from server 172.28.36.1 [TEXTIO.0]->DHCP: Server assigned IP: 172.28.36.102 [TEXTIO.0]->JNIB CMS ready at http://172.28.36.102:8080/cms [TEXTIO.0]->Enabling DHCP [TEXTIO.0]-> [TEXTIO.0]->------ build_program.bin ------- [TEXTIO.0]->jemcfg 3.10.05 September 27, 2008 3:16:15 PM PDT executive [TEXTIO.0]->Loaded 2047848 bytes from build_program.bin file in 4 seconds. [TEXTIO.0]->-------------------------------- [TEXTIO.0]-> [TEXTIO.0]->----- build_systemseg.bin ------ [TEXTIO.0]-> Configuration: JNibConfiguration [TEXTIO.0]-> Runtime: aJile CDC 1.1 Version 5.3.03 [TEXTIO.0]-> ucode version: 0x82 [TEXTIO.0]->C:\JavaSample\build_systemseg.bin [TEXTIO.0]->jemcfg 3.10.05 September 27, 2008 3:16:15 PM PDT executive [TEXTIO.0]->C:\aJile\Runtime_cdc11\ucode\jnib_uram.bin [TEXTIO.0]-> created on Sat Sep 20 06:59:41 2008 (GMT) [TEXTIO.0]->Loaded 17445 bytes from build_systemseg.bin file in 794 msec. [TEXTIO.0]->-------------------------------- vm.0 breakPoint: [Application loaded...click on "Reset" before running.] **** Interrupt pending **** vm.0 charadeIO active [TEXTIO.0]->TimeZoneData NAND storage area is unreadable...defaulting to GMT. [TEXTIO.0]->JNib CF Manager Initializing [TEXTIO.0]->Hello World !
のように表示されます。
ここでは、「シャレード(Charade)」の Consoleウィンドウからの指示に従い、ダウンロード終了後、「 Reset 」ボタンをクリックしてから、「 Run 」ボタンをクリックして 「 Hello World 」プログラムを起動しています。
この時、開発用PC上の 「 AppServer.bat 」の画面は、
のように表示され、JNIB側からの接続があり、「 build_program.bin 」ファイル と 「 build_systemseg.bin 」ファイル がダウンロードできたことが判ります。
実際のダウンロード時間の計測結果
これで、ネットワーク経由での高速ダウンロードができるようになりました。 それでは、どれだけ ダウンロードが早くなったかを実際にダウンロード時間を測定してみて検証してみます。
まず、実験に使った「 Hello World 」プログラムの場合。
転送されるファイルの大きさとして、build_program.bin が 1998KB、build_systemseg.bin が 18KB となっています。
このファイルの大きさで、私の開発環境では、従来のJTAG経由でのダウンロードには 1分40秒かかっていましたが、 ネットワーク経由では、それが 18秒 となりました。
「 Hello World 」プログラムは非常に小さいプログラムですので効果が5倍程でしたが、これでも開発効率は格段に良くなります。もっと大きなプログラムではその効果が 実際に10倍以上になると考えられます。
皆さんも是非、お試しください。
関連情報・リンク
- 当サイトの管理人: 四元輝博のブログ「 シリコンバレー 24時 」



