h1. 高速アプリケーション・ローディング 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) 」の 「 [[JNIBユーザーズガイドc2-6|2.6. 高速アプリケーション・ローディング (Fast Application Loading)]] 」にあると書かれています。 基本的な考え方としては、 転送スピードが遅いJTAG経由でのダウンロードに代わって、高速なEthernetを使ってファイルを転送してしまいましょう、というものです。 そのために、開発用PC上ではサーバーとなるソフトウェアを事前に走らせておき、JNIBからそのサーバーにネットワーク接続してファイルをダウンロードする形態をとります。 これを実現するために、JNIB側には あらかじめ 「 アプリケーション・ローダー: Application Loader (AppLoader) 」と呼ばれるソフトウェアをインストールしておきます。 また、JNIBからサーバーへの接続を指示するためには、「シャレード(Charade)」からJTAG経由でJNIBの アプリケーション・ローダーへ コマンドを送ってやります。 このコマンドを受け取ったアプリケーション・ローダーが ネットワーク経由でサーバーへの接続を開始するわけです。 この「 高速アプリケーション・ローダー (Fast application loader) 」機能は、たいへん魅力的な機能ではありますが、実際に実現しようと思っても、その方法は マニュアルからだけでは非常に判りにくくなっています。 そこで、私も試行錯誤の末 わかったのですが、この「 高速アプリケーション・ローダー (Fast application loader) 」機能を実現する方法の手順をここに具体的に示しておきます。 h2{padding-top:2em}. 前提条件 * ランタイムは「 JME CDC Runtime Version 5.3.03」 以降 を利用していること。 * 環境変数が適切に設定されていること。 ( [[環境変数の設定]] を参照のこと ) * アプリケーションの構築は「 C:\JavaSample 」ディレクトリ で 行っていると仮定。 * 開発用のウィンドウPC も JNIB も Ethernetで 同一セグメント内に接続されており、DHCPでIPアドレスが取得できる環境にあること。 h2{padding-top:2em}. アプリケーション・ローダー: 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フラッシュに書き込まなければならない、ということが判らず、長時間 ハマってしまいました。 ) h2{padding-top:2em}. 「 AppServer.bat 」によるサーバーの起動 「 C:\JavaSample 」ディレクトリにある「Hello World」プログラムを 従来どおり、「 JEM Builder 」で アプリケーション構築してください。 このとき、「 C:\JavaSample 」ディレクトリ に「 AppServer.bat 」というバッチ・ファイルが 自動的に作成されているハズです。 このバッチ・ファイル「 AppServer.bat 」をエクスプローラーからダブル・クリックして実行しておきます。 「 AppServer.bat 」が 問題なく起動すると、このような画面が現れるハズですので、そのまま走らせておいてください。 p=. !http://farm4.static.flickr.com/3037/2893666434_7bb290c37e.jpg!:http://farm4.static.flickr.com/3037/2893666434_6cd06f2975_o.png 【注意】 もし、「 AppServer.bat 」ファイルが 自動的に作成されていない場合は、お使いの ランタイムが「 JME CDC Runtime Version 5.3.03」 以降のバージョンであるかどうかを確認してください。 【注意】 他のアプリケーションをネットワーク経由でJNIBへダウンロードするには、今実行されている「 AppServer.bat 」を終了させ、ダウンロードしたいアプリケーションのディレクトリにある「 AppServer.bat 」を改めて起動する必要があります。 h2{padding-top:2em}. 「シャレード(Charade)」からの 「 AppLoader.sod 」スクリプトの実行 実行用のアプリケーション・ファイルをJNIBにダウンロードするために、「 C:\JavaSample 」ディレクトリにある「 AppLoader.sod 」 というシャレード(Charade) 用のスクリプト・ファイルを実行して、 JNIB上にあるアプリケーション・ローダーを起動させます。 「シャレード(Charade)」を起動して、メニューバーから [File]-[Execute...]を選択します。 p=. !http://farm4.static.flickr.com/3055/2875079198_ac925e8317.jpg!:http://farm4.static.flickr.com/3055/2875079198_3db2165dcd_o.png すると、「 Select command file to execute: 」ウィンドウが開いてきますので、 ディレクトリを 「 C:\JavaSample 」に移動し、「 AppLoader.sod 」を選択してから「開く」ボタンをクリックします。 p=. !http://farm4.static.flickr.com/3061/2892827211_73fef6557d.jpg!:http://farm4.static.flickr.com/3061/2892827211_2f5f202c9e_o.png すると、「シャレード(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 」の画面は、 p=. !http://farm4.static.flickr.com/3208/2893666458_8f4f77dc41.jpg!:http://farm4.static.flickr.com/3208/2893666458_ae3a47cbe8_o.png のように表示され、JNIB側からの接続があり、「 build_program.bin 」ファイル と 「 build_systemseg.bin 」ファイル がダウンロードできたことが判ります。 h2{padding-top:2em}. 実際のダウンロード時間の計測結果 これで、ネットワーク経由での高速ダウンロードができるようになりました。 それでは、どれだけ ダウンロードが早くなったかを実際にダウンロード時間を測定してみて検証してみます。 まず、実験に使った「 Hello World 」プログラムの場合。 転送されるファイルの大きさとして、build_program.bin が 1998KB、build_systemseg.bin が 18KB となっています。 このファイルの大きさで、私の開発環境では、従来のJTAG経由でのダウンロードには 1分40秒かかっていましたが、 ネットワーク経由では、それが 18秒 となりました。 「 Hello World 」プログラムは非常に小さいプログラムですので効果が5倍程でしたが、これでも開発効率は格段に良くなります。もっと大きなプログラムではその効果が 実際に10倍以上になると考えられます。 皆さんも是非、お試しください。 {{include(Footer)}}