The Intel Assabet (SA-1110 評価) ボード
=======================================

こちらを参照してください：
http://developer.intel.com/design/strong/quicklist/eval-plat/sa-1110.htm
http://developer.intel.com/design/strong/guides/278278.htm

John G Dorsey <jd5q@andrew.cmu.edu> のメモも参照してください：
http://www.cs.cmu.edu/~wearable/software/assabet.html


カーネルのビルド
----------------

現在のデフォルト値でカーネルをビルドする方法：

        make assabet_config
        make oldconfig
        make zImage

結果としてできあがるカーネルイメージは linux/arch/arm/boot/zImage にあります。


ブートローダのインストール
--------------------------

Assabet 上の Linux をブートすることのできるブートローダが２、３あります。

BLOB (http://www.lart.tudelft.nl/lartware/blob/)

   BLOB は LART プロジェクトで使われているブートローダです。Assabet をサポート
   するため、提供された幾つかのパッチが BLOB に取り込まれました。

Compaq 社の Bootldr + John Dorsey による Assabet サポート用パッチ
(http://www.handhelds.org/Compaq/bootldr.html)
(http://www.wearablegroup.org/software/bootldr/)

   Bootldr は iPAQ Pocket PC 用に Compaq 社によって開発されたブートローダです。
   Johon Dorsey は Assabet と JFFS ファイルシステムをサポートするアドオンパッチを
   提供しました。

RedBoot (http://sources.redhat.com/redboot/)

   RedBoot は eCos RTOS ハードウェア抽象化レイヤを基にして Red Hat により開発
   されたブートローダです。他の多くのハードウェアプラットフォームの一つとして
   Assabet をサポートしています。

唯一ネットワークをサポートしていること、および最も活発にメンテナンスされている
ことから、現在のところ RedBoot が推奨される選択肢です。

RedBoot で Linux をブートする方法の簡単な例を下記に示します。しかしながら、まず
最初にフラッシュメモリに RedBoot をインストールする必要があります。次の場所から、
動作することが分かっているコンパイル済みの RedBoot バイナリを取得することができ
ます。

ftp://ftp.netwinder.org/users/n/nico/
ftp://ftp.arm.linux.org.uk/pub/linux/arm/people/nico/
ftp://ftp.handhelds.org/pub/linux/arm/sa-1100-patches/

redboot-assabet*.tgz を探してください。インストール情報が redboot-assabet*.txt に
含まれています。


RedBoot 初期設定
----------------

ここで使用されるコマンドは、オンラインで入手可能な The RedBoot User's Guide
(http://sources.redhat.com/ecos/docs-latest/redboot/redboot.html) で説明されて
います。説明についてはそこを参照してください。

CF ネットワークカードを持っているなら (私の Assabet キットには Socket Communications
社の CF+ LP-E が付いています), TFTP ファイル転送用にそれを利用することをおおいに
検討すべきです。RedBoot は CF ネットワークカードを動的に検出できないので、RedBoot が
動く前に挿入しておく必要があります。

フラッシュディレクトリを初期化する方法：

        fis init -f

BOOTP を使いたいとか静的な IP アドレスを使いたいなどというような不揮発性設定を初期化
する場合は、次のコマンドを使ってください。

        fconfig -i


フラッシュへのカーネルイメージ書込み
------------------------------------

最初に、カーネルイメージを RAM にロードする必要があります。TFTP サーバ上に zImage
ファイルがあるのならば、次のようにしてください。

        load zImage -r -b 0x100000

かわりにシリアルポートで Y-Modem アップロードを使いたい場合は、こうです。

        load -m ymodem -r -b 0x100000

フラッシュに書き込む方法は次のとおり。

        fis create "Linux kernel" -b 0x100000 -l 0xc0000


カーネルのブート
----------------

カーネルはブートするためにさらにファイルシステムを要求します。RAM ディスクイメージを
次のようにロードすることができます。

        load ramdisk_image.gz -r -b 0x800000

再びですが、ファイル名を '-y ymodem' に置き換えることにより、TFTP のかわりに Y-Modem
アップロードを使うことができます。

次のような感じでフラッシュからカーネルを取り出すか、

        fis load "Linux kernel"

もしくは前述したとおりにロードできるので、カーネルをブートする方法は次のようになります。

        exec -b 0x100000 -l 0xc0000

RAM ディスクイメージも同様にフラッシュに格納することはできますが、下記で述べるように、
フラッシュ上のファイルシステムならば、もっと良いものがあります。


JFFS2 の使用
------------

書込み可能なファイルシステムをフラッシュに置く場合は、おそらく JFFS2 (セカンドジ
ャーナリングフラッシュファイルシステム) を使うのがもっとも便利でしょう。JFFS2 は、
低レベルフラッシュ管理に責任を持つ MTD レイヤとの結合部分で使用されます。Linux
MTD に関するより多くの情報はオンライン (http://www.linux-mtd.infradead.org/) で
入手できます。JFFS/JFFS2 イメージの作成に関する情報を含む JFFS の手引きが同サイトで
得られます。

たとえば、JFFS2 イメージのサンプルとして、下記で述べるコンパイル済み RedBoot
イメージを同 FTP サイトから取得することができます。

このファイルをロードするには次のようにします。

        load sample_img.jffs2 -r -b 0x100000

結果は次のようになるでしょう。

RedBoot> load sample_img.jffs2 -r -b 0x100000
Raw file loaded 0x00100000-0x00377424

さて、ここで未割当てのフラッシュのサイズを知る必要があります。

        fis free

結果はこうなります。

RedBoot> fis free
  0x500E0000 .. 0x503C0000

上記の値は、ファイルシステムのサイズおよびフラッシュのタイプによって異なるでしょう。
下記の使用方法は例として参照し、適切にあなたの数値に置き換えてください。

幾つかの値を決める必要があります。

未割当てのフラッシュのサイズ:      0x503c0000 - 0x500e0000 = 0x2e0000
ファイルシステムイメージのサイズ:  0x00377424 - 0x00100000 = 0x277424

当然ファイルシステムのイメージをぴったりにしたいと思うでしょうが、残りのフラッシュ
空間もファイルシステムに割り当てたいとも思うことでしょう。それは次のように書きます。

        fis unlock -f 0x500E0000 -l 0x2e0000
        fis erase -f 0x500E0000 -l 0x2e0000
        fis write -b 0x100000 -l 0x277424 -f 0x500E0000
        fis create "JFFS2" -n -f 0x500E0000 -l 0x2e0000

ひとたびファイルシステムが MTD "パーティション" に関連付けられたので、ブート
プロセス中に Linux が発見するでしょう。RedBoot では、`fis list'コマンドで次の
ように表示されます。

RedBoot> fis list
Name              FLASH addr  Mem addr    Length      Entry point
RedBoot           0x50000000  0x50000000  0x00020000  0x00000000
RedBoot config    0x503C0000  0x503C0000  0x00020000  0x00000000
FIS directory     0x503E0000  0x503E0000  0x00020000  0x00000000
Linux kernel      0x50020000  0x00100000  0x000C0000  0x00000000
JFFS2             0x500E0000  0x500E0000  0x002E0000  0x00000000

しかしながら、Linux は次のように表示するでしょう。

SA1100 flash: probing 32-bit flash bus
SA1100 flash: Found 2 x16 devices at 0x0 in 32-bit mode
Using RedBoot partition definition
Creating 5 MTD partitions on "SA1100 flash":
0x00000000-0x00020000 : "RedBoot"
0x00020000-0x000e0000 : "Linux kernel"
0x000e0000-0x003c0000 : "JFFS2"
0x003c0000-0x003e0000 : "RedBoot config"
0x003e0000-0x00400000 : "FIS directory"

ここで重要なのは、私達が注目しているパーティションの位置ですが、それは三番目に
あります。Linux では、これは /dev/mtdblock2 に対応します。このため、フラッシュに
あるカーネルとルートファイルシステムとで Linux をブートするには、次の RedBoot
コマンドが必要になります。

        fis load "Linux kernel"
        exec -b 0x100000 -l 0xc0000 -c "root=/dev/mtdblock2"

もちろん、JFFS 以外のファイルシステム、たとえば cramfs などを使用してもかまいません。
NFS のルートファイルシステムでブートしたいと思われるかもしれません。RAM ディスクや
NFS からブートしているあいだに Linux 内から直接ファイルシステムをフラッシュすることも、
可能ですし、ときにはより便利かもしれません。Linux MTD レポジトリには、たとえばフラッ
シュを消すといったことのように、フラッシュメモリを扱う多くのツールがあります。その
あとで消し去ったばかりのパーティション上に直接 JFFS2 をマウントし、直接ファイルを
コピーし、などなど...。


RedBoot スクリプト
------------------

Assabet を再起動するたびに上記の全てのコマンドをタイプしなければならないとしたら、
使いやすいとは言えないでしょう。そのため、RedBoot スクリプティング機能を用いる
ことにより、ブートプロセスを自動化することができるようになっています。

たとえば、私は下記のスクリプトを、ネットワーク上の TFTP サーバからカーネルと RAM
ディスクの両方を取り出して Linux をブートするのに使用しています。

RedBoot> fconfig
Run script at boot: false true
Boot script:
Enter script, terminate with empty line
>> load zImage -r -b 0x100000
>> load ramdisk_ks.gz -r -b 0x800000
>> exec -b 0x100000 -l 0xc0000
>>
Boot script timeout (1000ms resolution): 3
Use BOOTP for network configuration: true
GDB connection port: 9000
Network debug at boot time: false
Update RedBoot non-volatile configuration - are you sure (y/n)? y

これ以降は、Assabet の再起動は、ログインプロンプトを待つだけでよくなります。



Nicolas Pitre
nico@cam.org
2001 年 6 月 12 日


-rmk ツリーのペリフェラルの状況 (2001 年 10 月 14 日更新)
---------------------------------------------------------

Assabet:
 シリアルポート:
  ラジオ:                TX, RX, CTS, DSR, DCD, RI
   PM:                   テストされていない
  COM:                   TX, RX, CTS, DSR, DCD, RTS, DTR, PM
   PM:                   テストされていない
  I2C:                   実装済みだが十分にはテストされていない
  L3:                    テストを完全にパス
   PM:                   テストされていない

 ビデオ:
  LCD:                   十分にテスト済み。PM
                         (Neponset が接続されている場合は、LCD をブランクに
                         しないほうがよいみたい)
  ビデオ出力:            完全ではない

 オーディオ:
  UDA1341:
   再生:                 テストを完全にパス
   録音:                 実装済みだが十分にはテストされていない
   PM:                   テストされていない

  UCB1200:
   オーディオ演奏:       実装済みだが十分にはテストされていない
   オーディオ録音:       実装済みだが十分にはテストされていない
   Telco オーディオ演奏: 実装済みだが十分にはテストされていない
   Telco オーディオ録音: 実装済みだが十分にはテストされていない
   POTS コントロール:    ない
   タッチスクリーン:     ある
   PM:                   テストされていない

 その他:
  PCMCIA:
   LPE:                  テストを完全にパス
  USB:                   ない
  IRDA:
   SIR:                  テストを完全にパス
   FIR:                  テストを完全にパス
   PM:                   テストされていない

Neponset:
 シリアルポート:
  COM1,2:                TX, RX, CTS, DSR, DCD, RTS, DTR
   PM:                   テストされていない
  USB:                   実装済みだが十分にはテストされていない
  PCMCIA:                実装済みだが十分にはテストされていない
   PM:                   テストされていない
  CF:                    実装済みだが十分にはテストされていない
   PM:                   テストされていない

-np (Nicolas Pitre's) ツリーには、ほかにもあります。

------------------------------------------------------------
翻訳団体： JF プロジェクト < http://www.linux.or.jp/JF/ >
翻訳日：   2004/03/11
翻訳者：   川崎 貴彦 <takahiko(a)hakubi.co.jp>
