高速アプリケーション・ローディング

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倍以上になると考えられます。

皆さんも是非、お試しください。

関連情報・リンク

Also available in: HTML TXT