ソフィアシステムズ SandgateII評価

2005年5月31日
菊池 蘭
 

今回は、ソフィアシステムズ SandgateIIをお借り出来たのでその評価をします。
WindowsCE.net と Linux のインストール、そして、付属しているソフトウェアにターゲットを絞って解説しています。

製品の構成

この節では、SandgateIIの製品構成について説明します。

今回お借りしたSandgateII には以下のような製品が付属しています。

実際の製品には、512MBのコンパクトフラッシュが付属します。
CFは、LinuxのルートファイルシステムとかWinCEの外部記憶として使用されてます。

付属CDは以下の3点です。

  1. PXA270 EVA BOAD SandgateII評価版 PRODUCT No.BDT012S 2004.12.22
  2. SandgateII BDT012 Rev 0.7 2004.22
  3. SandgateII WindowsCE. Net 5.0 BSP評価版 2004-12-7

実際の製品では、1枚のCDだけが付属しますが、評価用特別版ということでいくつかのCDが付属しています。

  1. Jflash/POST/WinCE 4.2バイナリ/WinCE 5.0バイナリ/Linuxソースを含む開発環境
  2. ハードウェアマニュアル/Jflash/POST/WinCE 4.2
  3. Jflash/POST を含むWinCE 5.0 BSPの英語/日本語版

が、それぞれのCD に入っています

ちなみに、製品版でWinCE/Linux双方を選択した場合には、

が付属します。

SandgateIIには、今回評価したボード以外に2種類あります。
グラフィック強化のSandgateII-G、VoIP携帯端末向けSandgateII-Pがあります。
その中でもSandgateII-Pは、パワーマネジメントが使えることが特徴です。
電源制御用回路が用意されていますので、ウォームブート、パワーマネジメントによるサスペンド/レジュームができるはずです。

開発中にパワーマネジメント関連処理のハードウェアの実装が終わるまで待たなければならない場合があります。
例えば、パワマネージメント部の調整に時間がかかり、ギリギリにならないと仕上がってこない場合などです
そのとき、WinCE .net 4.xなら、ソフトウェア開発用にPocketPC 2003等を代替として使用できますが、WinCE 5.0ではライブラリ等の問題で出来ない場合がありますので、この評価ボードは最適と思います。

SandGateII-Pが、サスペンドやレジュームを実装し、調整がなされているとすると、開発リファレンスとしてとても参考になると考えています

このあたりの実装はいかがでしょうかね > ソフィアシステムズ様

POSTとブートローダ

この節ではPOSTとブートローダとそれらをFlashROMに書込むJFlashに関して説明します。

POST

SandgateIIを購入するとFlashROMに書かれているプログラムがPOST(Power On Self Test)です。製品検査用プログラムです。

添付されているバイナリはMMUのON/OFFで2種類用意しています。以下が用意されているファイルです。

 MMU OFF: POST_Sandgate_Cotulla.bin
 MMU ON: POST_Sandgate_Cotulla_MMU.bin

POSTは、CPU/サウンド/LCD/メモリ等のテストを行います。
POST自体のソースも公開されています。SandgateIIのほぼ全てのH/Wの検査を行っています。
新しいH/W開発時のテストプログラムとか、SandgateIIの周辺機器を追加した場合のテストには有益です。またブートローダ、Realtime OSの移植にも参考になります。ソース自体はインテルから提供されているのを変更したようです。。
ファイル拡張子、ファイル名から推測するとCodeWarriorを用いてで開発されたようです(秘密ですよ)。

ブートローダ

SandgateIIには、OSがWindowsCE .net 4.2/5.0とLinuxが用意されています。
ブートローダには、WindowsCEにはEboot、LinuxにはRedBootが用意されています。
EbootはWindowsCE専用のブートローダです。PlatformBuilderで作成出来ます。各プラットフォーム毎に用意されています。RedBootは、リアルタイムOS eCosがベースになっているブートローダです。機能が豊富です。PXA系ではU-Bootが使われている例もあります。

JFLASH

JFlashは、PCのパラレルポートとJTAGを接続するJFLASHケーブル経由でFlashROMにプログラムを書込むことが出来ます。
私が知るところでは、インテルがARM系を始めたStrongARMと呼ばれたころから用意されています。インテルのPXA250の評価プラットフォームではザイリンクスのFPGA用の書込アダプタと共用していいました。

通常FlashROMへの書込はJTAGアダプタを経由して行います。Jflashは最も低価格でFlashROMへの書込を用意しています。その分転送速度は速くないのでブートローダ程度しか書込ません。freescaleのPowerPCの評価ボードでも同じような形態のJTAGケーブルが用意されています。

WindowsCEのシステムバイナリ:nk.nb0とかターゲットのルートファイルシステムイメージはコンパクトフラッシュまたはネットワーク経由でSDRAMにダウンロードして書込むことになります。

JFlashはWindows 95/98/NT/2000/XPに対応しています。 最初に、アプリケーションとパラレルポートとの通信を管理するドライバ:giveio.sysをインストールします。

  C:\jflash>instdrv giveio c:\windows\system32\drivers\giveio.sys
  CreateService SUCCESS
  StartService SUCCESS
  CreateFile SUCCESS

次に、DOSプロンプトでJflash_Bv.exeを以下のように実行することで、ブロック0に書込ます。Pオプションで書込むブロックを指定出来ます。1ブロックは256KBです。

 > Jflash_bv eboot.bin

giveio.sys、Jflash_Bv.exeのソースは公開されています。インテルでも最新のチップに対応したソースを公開しています。
giveio.sysを作成するにはNT DDKが必要になります。しかし、変更することはないでしょう。
Jflash_Bvは、Microsoft Developer Studio 6.0で開発されています。実装されているFlashROMがサポートされていない場合には追加することになります。

IntelのWebサイトには、Intelが開発した評価ボード用のJFlashのソース、バイナリが公開されています。
JTAGの仕組みの勉強には役に立つところが多くあります。

JTAGの別のアプローチ

最近パラレルポートの無いPC、ノートPCが増えてきていてUSB接続による開発が切望されるようになっています。

USB経由で接続出来る1つの解として、ナヒテックのMITOUJTAG + Mobile JTAG Cable経由での方法を紹介します。JTAG経由で様々なことが出来ます。
SVFプレーヤー、ロジックアナライザ、ファンクションジェネレータ、ARMデバッガ、フラッシュROMライタの機能があります。
PXA250他多くのCPUを対応しつつあります。未だ開発途中なところはありますが期待がもてます。

それらを紹介しているなひたふ新聞です。

今回はSandgateIIを接続してCPUが認識しているところまでご紹介します。

Mobile JTAG Cable

JFLASHケーブル経由でCPUのピンの状態をモニタしている状態です。

JFLASHケーブルは、XILINKのパラレルケーブルとして認識されています。
インテルWebサイトからPXA270用のBSDLファイルをダウンロードして登録しています。

時間の都合上今回は、SandgateIIと接続して途中経過までしか入れることが出来ませんでした。次回機会があればもう少しこの点に関して解説したいと思います。

WindowsCE .net

この節では WindowsCE .net 4.2/5.0 のインストールと起動について説明をします。

 SandgateIIでは、WindowsCE .net 4.2/5.0のBSPがソースで用意されています。
PlatformBuilderでWindowsCEのROMイメージを作成出来ます。
WindosCE .net 5.0 BSPの正式版は、2005年4月26日にダウンロード可能になっています。今回は、5.0に関して解説をします。

WindowsCEでのPXA270の位置づけに関して説明します。
PXA270は、WindowsCEではCPUのアーキテクチャはARMV4Iとなっています。
ARMV4Iは、ARM7/9/11/PXA/IXPを含むARM系のCPUに全て対応出来ます。

WindowsCE 4.2迄ARMV4というCPUアーキテクチャをサポートしていました。ARMV4はStrongARM SA-1110を意味しています。Windows Mobile 2003 Second Edition(以後Windows Mobile 2003 SE)ではPXA270を使用している機種はARMV4を使用しています。PXA270は、ARMV4もARMV4Iもサポート可能になっています。
Windows Mobile 2003 SEでは、デバイスドライバはARMV4となります。WindowsCE 5.0ではARMV4Iとなりますので次のWindows MobileはARMV4Iになると予想されます。

WinddowsCE 5.0に至る迄にサポートされなくなったCPUが幾つかあります。
PowerPC/SH3/ARMV4等です。PowerPCはLinuxで活躍しています。

WindowsCE 5.0

 WindowsCE 5.0では、BSPのインストールはPlatformBuilder5.0上で行う操作には差は余りなく簡単にインストール出来ます。
CPUアーキテクチャはARMV4Iとなります。

次にSandgateIIにブートローダ:EbootをJFlashで書き込みます。JFlashケーブルをSandgateIIと接続してPCから書き込みます。 以下のようにします。

 > jflash_bv eboot.nb0

<JFlash書き込みログ>

C:\jflash>jflash_bv eboot.nb0
JFLASH Version 2.11.001 - SandgateⅡ
COPYRIGHT (C) 2000-2002 Intel Corporation
JTAG Test Passed
Bulverde revision C0

There are two 16-bit Flash devices in parallel

Characteristics for one device:
 Number of blocks in device = 256
 Block size = 65536 0x10000 word(16-bit)
 Device size = 16777216 0x1000000 word(16-bit)

Sample block to address list:

 Block 0 = hex address: 00000000
 Block 40 = hex address: 00A00000
 Block 80 = hex address: 01400000
 Block 120 = hex address: 01E00000
 Block 160 = hex address: 02800000
 Block 200 = hex address: 03200000
 Block 240 = hex address: 03C00000
The last 57 percent of image file is all zeros
Would you like to save time by not programming that area? [y/n]: y
Block of Flash Memory is Write Locked, would you like to unlock it? [y/n]: yUnlo
Starting erase0
Erasing done
Starting programming
Programming done hex address    1b500, 99.02% done
Starting Verify
Verification successful!

ブートローダもPlatformBuilderで作成可能ですので変更が可能となります。
書き込みが完了してJFlashケーブルを外して、シリアルケーブルを接続してターミナルソフトを起動すると起動ログを出力します。
ターミナルソフトの通信速度の設定は、38.4Kbps/8bit/NonParity/1Stopbit/NonFlowとなります。

<Eboot起動ログ>

大きいので別ウィンドウでどうぞ

続いてWindowsCEのROMイメージ: nk.binの書き込みを行います。 FlashROMの書込はネットワーク経由でEbootから行います。 以下が書き込み状況と起動ログです。

<nk.binの書き込みログ>

大きいので別ウィンドウでどうぞ

そうすると、WinCE 5.0 が起動できるようになります。 多少の文字化けは気にしないでください。

<WinCE 5.0起動ログ>

大きいので別ウィンドウでどうぞ

Linux

この節では Linuxのインストールと起動について説明をします。

SandgateIIには、もう1つのOSとしてLinuxが移植されています。
Kernel 2.4.18のMontaVista Linuxを採用しています。ブートローダはRedBootを採用しています。
ブートローダRedbootは、カーネルをRAM上にコピーして起動してCF上のファイルシステムをマウントして起動する形態を取っています。XIP起動等は行っていません。
LCD表示が無く、シリアルコンソールかネットワークでしかログインが出来ません。
Fbコンソール、X-Window、Qt/Embedded等が実装されていませんのでWinCEに比べて表示系が劣っているところがあります。

本CDにはテスト仕様及び結果報告書が付属しています。イーエルティが作業をしているようです(秘密ですョ)
以下にLinuxのスペックを列挙します。

 ブートローダ: Redboot
 Linux:  MontaVista Linux  Kernel 2.4.18 mvl30
  gcc: 3.2.1

Kernel 2.6へのPXA270も対応もされています。OpenBSDではPXA270を使用しているZaurus SL-C3000もサポートされています。

Linux環境構築

 Linuxが起動可能な環境をSandgateII上に構築します。
Linuxのブートローダ、カーネルのFlashROM、CFファイルシステムの書き込みを行います。この手順は、ブートローダはJFlash、カーネルはシリアル、CFはLinux PC上から書き込みます。

最初に、コンソール出力の為にSandgateIIとPCはシリアルケーブルで接続します。
PC側の通信ソフトはハイパーターミナルを使います。通信設定は以下のようになります。

 115kbps/8bit/パリティなし/1ストップビット/フロー制御なし

Tera Term Proを代わりに使用しないで下さい。カーネル転送でxmodem転送不良となります。JFlash関連のソフトは既にインストールされていることが前提となります。

ブートローダのFlashROMへの書き込み

 ブートローダをFlashROMに書き込みます。

 ブートローダの書き込みはJFlashを使用します。JFlashケーブル経由で書込ます。
JFlashケーブルをSandgateIIとPCパラレルと接続します。

DOSプロンプトで以下のようにします。

<書き込みログ>

C:\jflash>jflash_bv redboot.bin
JFLASH Version 2.11.001 - SandgateⅡ
COPYRIGHT (C) 2000-2002 Intel Corporation
JTAG Test Passed
Bulverde revision C0

There are two 16-bit Flash devices in parallel

Characteristics for one device:
 Number of blocks in device = 256
 Block size = 65536 0x10000 word(16-bit)
 Device size = 16777216 0x1000000 word(16-bit)

Sample block to address list:

 Block 0 = hex address: 00000000
 Block 40 = hex address: 00A00000
 Block 80 = hex address: 01400000
 Block 120 = hex address: 01E00000
 Block 160 = hex address: 02800000
 Block 200 = hex address: 03200000
 Block 240 = hex address: 03C00000

Block of Flash Memory is Write Locked, would you like to unlock it? [y/n]: yUnlo
Starting erase0
Erasing done
Starting programming
Programming done hex address    20400, 99.92% done
Starting Verify
Verification successful!

書込後、JFlashケーブルをSandgateIIから外します。
ハイパーターミナルからの出力が以下のようになれば正常に書込まれたことになります。

<SandgateIIのRedboot出力>

+FLASH configuration checksum error or invalid key
Qォノケ篇‘th0: MAC address 12:13:14:15:16:17
Can't get BOOTP info for device!

RedBoot(tm) bootstrap and debug environment [ROM]
Non-certified release, version UNKNOWN - built 09:33:35, Aug 25 2004

Platform: PXA270 SandgateII (XScale)
Copyright (C) 2000, 2001, 2002, Red Hat, Inc.

RAM: 0xa0000000-0xa4000000, 0xa0013928-0xa3f9d000 available
FLASH: 0x04000000 - 0x08000000, 256 blocks of 0x00040000 bytes each.
RedBoot>

この出力が出れば書き込みが完了したことになります。

ターゲット用コンパクトフラッシュ(CF)の作成

 ルートファイルシステムをCF上に構築します。
最初にCFにLinuxパーティションを作成、ext2でフォーマットします。以下のようになります。今回はSundisk 512MBを使用しています。
作業に使用したlinuxはRedhat 9.0でUSB接続のCFアダプタ経由で書込んでいます。

# fdisk /dev/sda


コマンド (m でヘルプ): p
 
Disk /dev/sda: 512 MB, 512483328 bytes
16 heads, 63 sectors/track, 993 cylinders
Units = シリンダ数 of 1008 * 512 = 516096 bytes
  
 デバイス ブート   始点      終点  ブロック   ID  システム
/dev/sda1             1       993    500440+  83  Linux
 
# mkfs -t ext2 /dev/s a1

この操作は、Linux上でPCMCIAまたはUSBメモリアダプタに接続されたCFに対して行います。このデバイスは起動する必要はありませんのでBoot可能にする設定は必要ありません。
X86 linuxをCFに入れる場合に、Bootのフラグが設定されていない為に起動しないことがあります。

そこにCDに格納されているターゲットバイナリを展開します。
CFをマウントして、CFのルート上で以下のようにファイルを展開します。。

# tar jxvf sg2pxa270-target.tar.bz2

以上で展開が完了して、Linuxのルートファイルシステムとして使用出来ます。

カーネルのFlashROMへの書き込み

 カーネルをネットワーク経由でFlashROMに書き込みます。

 シリアル経由でカーネルをPC上ハイパーターミナルからダウンロードします。ファイル転送に使われるプロトコルはxmodemです。以下の作業はハイパーターミナル上から作業です。

RedBootでフラッシュ領域の初期化を行います。

RedBoot> fis init
About to initialize [format] FLASH image system - continue (y/n)? y
*** Initialize FLASH Image System
    Warning: device contents not erased, some blocks may not be usable
... Unlock from 0x07fc0000-0x08000000: .
... Erase from 0x07fc0000-0x08000000: .
... Program from 0xa3f9f000-0xa3fdf000 at 0x07fc0000: .
... Lock from 0x07fc0000-0x08000000: .

Xmodemプロトコルでカーネルをロードする用意します。

RedBoot> load ?r ?b 0xa0200000 ?m xmodem

sg2pxa270-linux.tar.bz2に含まれるprebuilt\zImageをハイパーターミナルからxmodemプロトコルでファイル送信します。
完了後、flashROMへ書込します。

RedBoot> fis create linux ?f 0x04100000 ?b 0x20400000 ?l 00600000

その後RedBootのfconfigで設定を行います。この設定を行わないと電源起動毎に設定が必要になります。

一連のRedBoot上でのログは以下のようになります。 fconfigでRedboot起動時のLinux自動起動の設定を行っています。

<Redboot設定ログ>

大きいので別ウィンドウでどうぞ

Linuxの起動

SandgateIIにCFを装着して電源を入れます。
以下のようなログがシリアルから出力されログインが出来ます。
LCDには表示されません。

<SandgeteII Linux起動ログ>

大きいので別ウィンドウでどうぞ

linux詳細

linuxでは、RedBoot/linix Kernelのソースが提供されています。
それぞれの開発環境も添付されていますので、環境をインストールすると直ぐ開発にとりかかれます。
ターゲットには、X-Window環境は用意されていないので用意する必要があります。ターゲットアプリケーション開発に関しては工夫が必要と思われます。

RedBootはソースファイル:sg2pxa270-ecos.tar.bz2が添付されています。
ブートローダの作成、再構築に関しての手順も添付されていますので変更が可能になっています。
eCosのバージョンは2.11です。クロスコンパイラを含む開発環境も含まれています。

カーネルのソースは添付されています。sg2pxa270-linux.tar.bz2の中にカーネル、開発環境、ターゲットイメージが含まれます。
その中には、gcc 3.2.1のクロスコンパイラを含む環境が用意されています。

現時点で動作しているのは、以下のドライバになります。

  シリアル
  イーサネット
  コンパクトフラッシュ

ターゲットは抜粋した以下のコマンド、ライブラリ等が用意されています。
バイナリのみ用意されています。

<ターゲットファイルシステムファイルリスト>

大きいので別ウィンドウでどうぞ

このようなファイル群が、ファイルシステムの中に展開されます。

以上です。

いや?、長文のレポートありがとうございます。長かったデスね。でも内容的にもビックリするほど豊富でした。菊池さん、また何か借りてきましたらよろしくお願いします。
世界初の SandGate IIへの Windows CE / Linux のインストールプロセスを述べた日本語ドキュメントの作成、ありがとうございます。皆様の参考になると確信しております。
ちなみに、事務局では、Linux のブートログはなんとなく理解できました。考えてみれば、個人的に初めてLinux を動かした486機(486DX2-66/32MB/kernel 0.99.12)よりスペックが上なんですね・・・ストレージすら多いです(たしか240MBのIDEでしたから)