  Alpha Miniloader Howto
  David A. Rusling, david.rusling@reo.mts.dec.com
  v0.81, 17th April 1996
  松本庄司,shom@i.h.kyoto-u.ac.jp
  1996年6月15日

  この文書には、 Alpha ベースの機械を初期化して Linux をロードするプログ
  ラム、Miniloader のことが書いてあります。 Alpha Linux Miniloader は
  Milo と呼ばれています。

  注意: この文書はかなり以前に書かれたものなので、いまどきの Linux 環境
  にはあてはまらない箇所があります。 (JF Project)
  ______________________________________________________________________

  目次

  1. イントロダクション
     1.1 著作権
     1.2 この文書の最新版

  2. Milo って何？
  3. コンパイル済みの標準的な Milo のイメージ
  4. Milo の作り方
  5. Milo の読み込み
     5.1 Windows NT ARC ファームウェアから Milo を読み込む
     5.2 評価用ボードデバッグモニタから Milo を読み込む
     5.3 緊急用(failsafe)ブートブロックフロッピーから Milo を読み込む
     5.4 フラッシュメモリから Milo を読み込む
     5.5 SRM コンソールから Milo を読み込む
     5.6 システムに固有の情報
        5.6.1 AxpPCI33 (Noname)
        5.6.2 AlphaPC64 (Cabriolet)
        5.6.3 EB66+
        5.6.4 EB64+/Aspen Alpine
        5.6.5 Universal Desktop Box (Multia)
        5.6.6 EB164
        5.6.7 XL266
        5.6.8 Platform2000

  6. Milo のユーザインターフェース
     6.1 "help" コマンド
     6.2 Linux の起動
     6.3 Linux の再起動
     6.4 "bootopt" コマンド

  7. フラッシュメモリマネージメントユーティリティの実行
     7.1 "help" コマンド
     7.2 "list" コマンド
     7.3 "program" コマンド
     7.4 "environment" コマンド
     7.5 "bootopt" コマンド
     7.6 "quit" コマンド

  8. 制限事項
  9. 解決済みの問題
  10. 謝辞

  ______________________________________________________________________

  1.  イントロダクション

  この文書では Alpha AXP で動く Linux のための Miniloader (Milo) につい
  て記述しています。このファームウェアは、 Alpha AXP ベースのシステムの
  初期化、Linux の読み込み、起動、 Linux 用の PALcode の準備に使われま
  す。

  1.1.  著作権

  The Alpha Miniloader (Milo) HOWTO is copyright (C) 1995, 1996 David A
  Rusling.

  Copyright. Like all Linux HOWTO documents, it may be reproduced and
  distributed in whole or in part, in any medium, physical or
  electronic, so long as this copyright notice is retained on all
  copies.  Commercial redistribution is allowed and encouraged; however
  the author would like to be notified of such distributions.  You may
  translate this HOWTO into any language whatsover provided that you
  leave this copyright statement and disclaimer intact, and that you
  append a notice stating who translated the document.

  著作権：他の Linux HOWTO ドキュメントと同様に、この著作権表示が入って
  いれば、本文の全てまたは一部にかかわらず、また物理的にも電子的にも、複
  製したり配布したりできます。商業的再配布も奨励しますが、できれば著者に
  連絡してください。この HOWTO はどんな言語に訳してもかまいません。ただ
  しこの著作権表示と免責事項はそのまま残しておき、翻訳者が誰であるかを明
  示した注意書きを加えてください。

  [訳注：日本語訳／松本庄司＠京大人間環境 (Translation into Japanese :
  MATSUMOTO Shoji, Graduate School of Human and Envilonmental Studies,
  Kyoto-Univ, Japan, shom@i.h.kyoto-u.ac.jp <mailto:shom@i.h.kyoto-
  u.ac.jp>)]

  Disclaimer. While I have tried to include the most correct and up to
  date information available to me, I cannot guarantee that usage of
  information in this document does not result in loss of data or
  equipment.   I provide NO WARRENTY about the information in the HOWTO
  and I cannot be made liable for any consequences resulting from using
  the information in this HOWTO.

  免責事項：私はできるだけ正確で新しい情報を収めるようにしていますが、こ
  の文書の情報によってデータや設備がいかなる損害を受けようとも、責任は持
  ちません。HOWTO にある情報については保証できませんし、情報を利用した結
  果についても責任は持てません。

  1.2.  この文書の最新版

  この文書の最新版は <ftp://gatekeeper.dec.com/pub/Digital/Linux-
  Alpha/Miniloader/docs> にあります。また、David Mosberger-Tang 氏の好意
  により、この文書の html 版が彼の素晴しい Linux Alpha FAQ サイト
  <http://www.azstarnet.com/~axplinux> に置いてあります。

  2.  Milo って何？

  Intel ベースの PC システムでは、 BIOS のファームウェアがシステムをセッ
  トアップし、 DOS ファイルシステムのブートブロックから実行イメージを読
  み込みます。これは Milo が Alpha ベースのシステムで行っていることとそ
  れほど変わりません。しかし、 Milo と BIOS ファームウェアには、いくつか
  の興味深い相異点があります。その一つは、標準的な Linux のデバイスドラ
  イバが手を加えずに組み込まれているということです。また、自分自身の読み
  込みを BIOS ファームウェアに頼っている LILO とは違って、 Milo はそれ自
  身がファームウェアです。Milo の主な機能は次のようなものです：

  1. PALcode

  2. メモリセットアップコード(ページテーブルを作り、仮想アドレッシングを
     有効にする)

  3. ビデオコード(BIOS エミュレーションコードと TGA(21030))

  4. Linux カーネルコード(これには、割り込み処理などの実際の Linuxカーネ
     ルコードと擬似カーネルコードが含まれます)

  5. Linux ブロックデバイスドライバ(フロッピードライバなど)

  6. ファイルシステムサポート(ext2・MS-DOS・ISO9660)

  7. ユーザインターフェースコード(MILO)

  8. カーネルインターフェースコード(Linux 用のメモリマップと HWRPB の
     セットアップ)

  9. 環境変数を制御する NVRAM コード

  以下にこれらの機能の詳細を述べます。

  PALcode とは、チップを特定のオペレーティングシステムに合わせる単純なソ
  フトウェアレイヤと考えることができます。 PALcode は PALmode という特殊
  なモードで動きます。このモードには制限がありますが、標準の Alpha 命令
  セットと 5 つの拡張命令のみで動作します。このモードを使うことによっ
  て、Windows NT、Open VMS、 Digital Unix、そしてもちろん Linux といった
  様々なオペレーティングシステムを Alpha チップ上で実行させることが可能
  になります。 Milo の使う (すなわち Linux の使う) PALcode は、 Milo の
  他の部分と同様にフリーウェアです。この PALcode は Digital 社の評価用
  ボードの Digital Unix PALcode の例を元にしています…。 Alpha チップと
  種々の Alpha ベースのシステムにある I/O アドレスのマッピングや割り込み
  処理の違いによって (21066 ベースのシステムは 21064+2107x ベースのシス
  テムでは I/O マップが違います)、 PALcode が変わってきます。

  Milo が正しく動作するためには、メモリのどの部分が利用可能かわからねば
  なりませんし、 Linux の実行開始位置も知っておかねばなりません。また、
  Linux のデバイスドライバ用に、一時的にメモリを割り当てる必要もありま
  す。 Milo のコードは、常に確保しておくページや一時的に確保するページの
  エントリを管理します。 Milo は起動直後に自分自身を物理メモリの適切な場
  所に展開します。次に自分を圧縮しておけるだけのメモリと、 (カーネルが必
  要とする) PALcode といくらかのデータ領域を確保し、 Linux カーネルに制
  御を渡します。これによって、Linux 自身にメモリのほとんどを残しておきま
  す。

  メモリコードの最後では、 Linux が必要とするデータ構造が仮想メモリの適
  切な位置にくるように仮想アドレッシングを設定します。

  Milo にはシステムのビデオデバイスを初期化し利用するビデオコードが含ま
  れています。ビデオコードは、まず VGA を使おうとし、見付からなかったら
  TGA (21030) ビデオデバイスを使おうとします。それでも失敗すると、グラ
  フィックデバイスはないものと見なします。標準のコンパイル済み BIOS エ
  ミュレーションコードには Digital 社の BIOS エミュレーションコードが含
  まれています。このエミュレーションコードを使えば、全てとはいいきれませ
  んが、ほとんどの標準的なグラフィックデバイスを使うことができます。

  Linux のデバイスドライバはカーネルに埋め込まれていますので、サービスの
  一部はカーネルにに任せてしまいます。例えば割り込みのハンドルなどは、
  カーネルの擬似ルーチンだけが入っています。

  Milo の最も強力な点は、選択されていない [訳注：カーネルに入っていない]
  Linux デバイスドライバを内蔵できるところです。これによって Linux の全
  てのデバイスドライバに対応できる可能性が出てきます。 Milo には、Linux
  カーネル内の多くのブロックデバイスに対応するブロックデバイス(例えば
  ll_rw_blc())が組み込まれています。

  Milo は、ブートブロックや他の特殊な場所 [訳注：SRM など]からではなく、
  実際のファイルシステム、すなわち MSDOS、EXT2、ISO9660 ファイルシステム
  から Linux のカーネルを読み込みます。 gzip で圧縮されたファイルも読み
  込めますので、特にフロッピーから読み込む場合にはお薦めです。 Milo は
  ファイル末尾が .gz であるファイルを圧縮ファイルだと認識します。

  Milo は単純なキーボードドライバとビデオドライバを内蔵しており、それら
  を使って簡単なユーザインターフェースを実現しています。このインター
  フェースによって、設定済みのファイルシステムのリストを取ったり、 Linux
  をフラッシュメモリから起動したり、ユーティリティをアップデートしたり、
  システムの起動を制御する環境変数を設定したりできます。 LILO のように、
  カーネルに引数を与えることもできます。

  Milo はシステムの種類・塔載メモリの量・フリーメモリの量を Linux カーネ
  ルに渡します。これは HWRPB (HardWare Restart Paramater Block) という
  データ構造体とメモリクラスタの記述を使って実現されています。これらは、
  Linux カーネルに制御が移る直前に、仮想メモリの適切な場所に配置されま
  す。

  3.  コンパイル済みの標準的な Milo のイメージ

  Linux を標準的な Alpha ベースのシステムで動かすのならば、既製の"標準"
  Milo イメージを使うことができます。 Milo イメージは、ソースその他と共
  に <ftp://gatekeeper.dec.com/pub/Digital/Linux-Alpha/Miniloader> にあ
  ります。

  images というサブディレクトリには、標準的なシステム(例えば AlphaPC64
  など)ごとにそれぞれのディレクトリがあります。そこにある Milo のイメー
  ジには次のような規則で名前が付けられています：

  1. milo - Miniloader 実行イメージ (このイメージは色々な方法で読み込む
     ことができます)

  2. fmu.gz - フラッシュメモリマネージメントユーティリティ

  3. milo.dd - ブートブロックフロッピーディスクイメージ (これは
     rawrite.exe や Linux 上の dd で書かねばなりません)
  images ディレクトリと同じような test-images というディレクトリもありま
  す。ここに置いてあるイメージは試験的なものですが、最新の機能が備わって
  いるでしょう。

  4.  Milo の作り方

  Milo はカーネルとは別に作ります。 Milo にはカーネルの一部(例えば割り込
  み処理など)が必要ですので、まず作りたい Milo に合うカーネルを作ってお
  かねばなりません。ほとんどの場合、バージョンが同じカーネルを作ることに
  なります。例えば、 milo-1.3.76.tgz は linux-1.3.76.tar.gz に対応するも
  のです。もしかするとバージョンのもっと高いカーネルにも使えるかもしれま
  せんが、駄目かもしれません。以下、カーネルのソースとオブジェクトファイ
  ルは /usr/src/linux にあると仮定して話を進めます。

  Milo を作るには、まず Milo のソースのあるディレクトリに移動して、下の
  ようにします：

            make KSRC=/usr/src/linux config

  Linux のカーネルを作る時と同じように、いくつかの質問に答えます。

            Echo output to the serial port (MINI_SERIAL_ECHO) [y]

  カーネルの printk を /dev/ttyS0 に出力するのは悪くないでしょう。できれ
  ば(そして望むなら)"y"と答えます。

            Use Digital's BIOS emulation code (not free) (MINI_DIGITAL_BIOS_EMU) [y]

  このコードには、 Alpha ベースのシステムで使う限りは自由に配布できるラ
  イブラリが含まれています。しかし、ソースは配布できません。もし"n"と答
  えれば、代わりにフリーの BIOS エミュレートコードが使われます。ソースは
  Milo と同じ場所にあります。

  5.  Milo の読み込み

  ほとんどのシステムが Windows NT ARC ファームウェアを載せていますので、
  Milo を読み込む方法として最も汎用的です。 Windows NT ARC ファームウェ
  アを含め、以下のような様々な方法で Milo を読み込むことができます：

  o  緊急用(failsafe)ブートブロックフロッピー

  o  Windows NT ARC ファームウェア

  o  Digital 社の SRM コンソール

  o  Alpha 評価用ボードデバッグモニタ

  o  フラッシュメモリ(または ROM)

  5.1.  Windows NT ARC ファームウェアから Milo を読み込む

  Alpha AXP ベースのシステムのほとんどには Windows NT ARC ファームウェア
  が載っています。これは Milo や Linux を起動する手段として十分に薦めら
  れます。 Windows NT ファームウェアが動いており、自分のシステムに適した
  Milo のイメージがあるならば、どのシステムでもこの方法でうまくいきま
  す。

  Windows NT ARC ファームウェア環境では、プログラムを動かしたりファーム
  ウェアを動作させるコールバックを作ったりできます。これを行うのが
  Windows NT OSLoader です。単に Milo の読み込みと実行だけをするのが
  linload.exe です。 linload.exe は適切なイメージファイルをメモリの
  0x00000000 に読み込み、それに対して swap-PAL PALcall を発行します。こ
  の swap が必要なのは、Milo が Linux と同様に Windows NT とは異る
  PALcode を使うためです。 [訳注：ARC コンソールの段階では PALcode が
  WinNT 用になっているため、これを Linux</Milo 用に置きかえなければいけ
  ません]。 Milo は自分自身を 0x200000 にリロケートし、リセットエントリ
  ポイントから PALcode を再実行します。

  Linux の選択項目をつけ加える前に、 Windows NT ARC ファームウェアが読み
  込める形の Milo と linload.exe をコピーしておかねばなりません。 DOS
  フォーマットのフロッピーから起動するような例を挙げておきます：

  1. ブートメニューで "Supplementary menu..." を選びます。

  2. "Supplementary menu" で "Set up the system..." を選びます。

  3. "Setup menu" で "Manage boot selection menu..." を選びます。

  4. "Boot selections menu" で "Add a boot selection" を選びます。

  5. "Floppy Disk 0" を選びます。

  6. osloader directory と name に "linload.exe" を入力します。

  7. operating system being on the same partition as the osloader には
     "yes" と答えます。

  8. operationg system root directory には "\" を入力します。

  9. name for this boot selection には私は "Linux" を入れています。

  10.
     you do not want to initialise the debugger at boot time には "No"
     と答えます。

  11.
     "Boot selections menu" に戻り、"Change a boot selection option" で
     今作った項目を選びます。

  12.
     下の矢印キーを押して "OSLOADFILENAME" を選び、 "noname.arc" のよう
     に使いたい Milo のイメージの名前をタイプします。

  13.
     "Boot Selections menu" に戻るために ESC を押します。

  14.
     "Setup Menu" を選ぶか ESC を押すかして、"Supplementary menu, and
     save changes" を選びます。

  15.
     ESC を押して "Boot menu" に戻ると、Milo が使えるようになります。も
     しデフォルトで Linux を起動したくなければ、"Boot selections menu"
     で優先順位を変えることができます。

  上の作業が全て終わると、boot selection は次のようになっているはずで
  す：

       LOADIDENTIFIER=Linux
       SYSTEMPARTITION=multi(0)disk(0)fdisk(0)
       OSLOADER=multi(0)disk(0)fdisk(0)\linload.exe
       OSLOADPARTITION=multi(0)disk(0)fdisk(0)
       OSLOADFILENAME=\noname.arc
       OSLOADOPTIONS=

  これで Milo と Linux を起動できるようになりました。 Windows NT が認識
  できる NTFS や DOS のファイルシステムから直接 linload.exe と Milo を読
  み込むこともできます。

  OSLOADOPTIONS はコマンドとして Milo に渡されます。 Milo を止めずに
  Windows NT から Linux を直接起動するためには、 OSLOADOPTIONS を次のよ
  うに設定します：

       boot sda2:vmlinux.gz root=/dev/sda2

  どのようなコマンドが使えるか、詳しくは ``Milo のユーザインターフェー
  ス'' を参照してください。

  WNT ARC ファームウェアを通して Milo を読み込む(ちょっと姑息な)手段とし
  て、 Milo を MS-DOS フロッピーに fwupdate.exe という名前で書き込み、
  "Upgrade Firmware" を選ぶという技もあります。

  5.2.  評価用ボードデバッグモニタから Milo を読み込む

  評価用ボード(もしくはその互換ボード)は Alpha 評価用ボードデバッグモニ
  タをサポートしています。この方法で Milo を起動しようとする前に、自分の
  システムに付いているドキュメントを参照してください。次のシステムがデ
  バッグモニタをサポートしていることが判っています：

  o  AlphaPC64 (``AlphaPC64''を参照)

  o  EB64+ (``EB64+''を参照)

  o  EB66+ (``EB66+''を参照)

  o  EB164 (``EB164''を参照)

  この方法を試す前に、現バージョンの評価用ボードデバッグモニタにビデオド
  ライバやキーボードドライバが入っていないことを確認しておきましょう。ま
  た、デバッグモニタを使えるように、シリアルポートに他のシステムを繋げて
  おいてください。このインターフェースは非常に単純で、 help と打てば使え
  るコマンドが全て表示されます。そのうち、 boot や load という文字が入っ
  ているコマンドがよく使われます。

  評価用ボードデバッグモニタは、ネットワーク (netboot) やフロッピー
  (flboot) からイメージを読み込むことができます。どちらの場合でも、イ
  メージを起動する前に > bootadr 200000 として、ブートアドレスを
  0x200000 にしておかねばなりません。

  もしイメージがフロッピーにある場合(DOS フォーマットのフロッピーにのみ
  対応)、次のようなコマンドを打込みます：

            AlphaPC64> flboot <Milo-image-name>

  5.3.  緊急用(failsafe)ブートブロックフロッピーから Milo を読み込む

  AxpPCI33 だけが緊急用(failsafe)ブートブロックフロッピーをサポートして
  いることが判っています(``Noname''を参照)。

  もしコンパイル済みの標準的な Milo の .dd イメージがなければ、 SRM ブー
  トブロックフロッピーを作らねばなりません。 Milo がすでに作ってあれば、
  Digital Unix が動いているマシンで次のようにします：

            fddisk -fmt /dev/rfd0a
            cat mboot bootm > /dev/rfd0a
            disklabel -rw rfd0a 'rx23' mboot bootm

  もしくは Linux が動いているマシンで次のようにしても良いでしょう：

            cat mboot bootm > /dev/fd0

  もし標準 Milo イメージ(ここでは milo.dd としましょう)があるならば、次
  のコマンドでブートブロックフロッピーを作ることができます：

            dd if=milo.dd of=/dev/fd0

  5.4.  フラッシュメモリから Milo を読み込む

  Windows NT ARC ファームウェアを使う代わりに、フラッシュメモリに Milo
  を入れて直接起動できるシステムも数多くあります：

  o  AlphaPC64 (``AlphaPC64''を参照)

  o  Noname (``Noname''を参照)

  o  EB66+ (``EB66+''を参照)

  o  EB164 (``EB164''を参照)

  5.5.  SRM コンソールから Milo を読み込む

  SRM (System Reference Manual の略) コンソールはファイルシステムやパー
  ティションは認識しないことがわかっています。 SRM は、 2 番目のブートス
  トラップローダが、物理ディスクのあるオフセットから連続した領域を確保す
  ると仮定しています。 2 番目のブートストラップローダの情報(大きさとオフ
  セット)はブロックの先頭から512 バイトに収められています。 SRM を使って
  Milo を読み込むには、SRM がアクセスできるデバイス (例えばフロッピー
  ディスク)に mboot と bootm と呼ばれるストラクチャを作らねばなりませ
  ん。 mboot は最初のブロック(もしくはブートの記述領域)で、 Milo イメー
  ジを 512 byte 境界で切り上げたものです。

  Milo をブートブロックデバイスから読み込むには、 mboot と bootm を作
  り、次のコマンドで起動デバイスに書き込みます：

               $ cat mboot bootm > /dev/fd0

  もしくは、適切な milo.dd を Web サイトから取ってきて、 RAWRITE.EXE や
  dd を使って起動デバイスに書き込んでください。

  これで SRM コンソールを起動して そこから Milo を起動できるようになりま
  した。例えば、ブートブロックフロッピーから Milo を起動するには次のコマ
  ンドを使います：

               >>>boot dva0
               (boot dva0.0.0.0.1 -flags 0)
               block 0 of dva0.0.0.0.1 is a valid boot block
               reading 621 blocks from dva0.0.0.0.1
               bootstrap code read in
               base = 112000, image_start = 0, image_bytes = 4da00
               initializing HWRPB at 2000
               initializing page table at 104000
               initializing machine state
               setting affinity to the primary CPU
               jumping to bootstrap code
               Milo Stub: V1.1
               Unzipping Milo into position
               Allocating memory for unzip
               ####...

  次のシステムが SRM コンソールをサポートしていることが判っています：

  o  Noname (``Noname''を参照)

  o  AlphaPC64 (``AlphaPC64''を参照)

  o  EB164 (``EB164''を参照)

  5.6.  システムに固有の情報

  5.6.1.  AxpPCI33 (Noname)

  Noname ボードは Milo を Windows NT ARC ファームウェア (``Windows NT
  ARC ファームウェアから Milo を読み込む''を参照)、 SRM コンソール
  (``SRM コンソールから Milo を読み込む''を参照)、緊急用ブートブロックフ
  ロッピー (``緊急用ブートブロックフロッピーから Milo を読み込む''を参
  照) から読み込めます。

  Noname の起動を制御するには、ボード上のジャンパ J28,J29 を設定します。

                           4
               J29     2 x x x 6
                       1 x x x 5

               J28     2 x x x 6
                       1 x x x 5
                           3

  J28 の 1-3 ピンを繋げるとフラッシュメモリから起動します。 J29 の 1-3
  ピンを繋げると ブートブロックフロッピーから起動します。後者は Noname
  ボードで最初に Milo を起動するのに必要な設定の一つです。 [訳注：私は
  Windows NT ARC ファームウェアからいけましたが…]

  ジャンパでフロッピーからの起動を選んだら、 Milo を書き込んだ SRM ブー
  トブロックフロッピーをフロッピードライブに入れて再起動します。しばらく
  するとフロッピーのライトが消えて画面が白く点滅し、 Milo のプロンプトが
  出ます。

  技術的な説明をします。 Noname はフロッピー上のイメージを物理アドレス
  0x104000 に読み込み、フラッシュメモリ上のイメージを 0x100000 に読み込
  みます。そのために、Milo はその PALcode が 0x200000 から始まるように作
  られています。 Milo は最初に読み込まれた時に、自分自身を適切な場所へ移
  動します(リロケートを参照)。

  5.6.2.  AlphaPC64 (Cabriolet)

  AlphaPC64 は NT ARC ファームウェア (``Windows NT ARC ファームウェアか
  ら Milo を読み込む''を参照)と SRM コンソール (``SRM コンソールから
  Milo を読み込む''を参照)と評価用ボードデバッグモニタ (``デバッグモニタ
  から Milo 読み込む''を参照)をサポートしています。これらのイメージはフ
  ラッシュメモリに格納されており、 Milo をフラッシュメモリから直接起動す
  るための空きもあります。 Milo が動けば Milo からフラッシュメモリマネー
  ジメントユーティリティが実行できますので、Milo をフラッシュメモリに書
  き込むことができます (``フラッシュメモリマネージメントユーティリティの
  実行''を参照)。このシステムは Milo の環境変数に対応しています。

  Milo がフラッシュメモリに入っているならば、 TOY clock の NVRAM に保存
  されている番号のイメージを起動するか、フラッシュメモリの最初のイメージ
  を起動するかを、ジャンパの組み合わせで決めます。

  ジャンパ J2 の SP の bit 6,7 には次のような意味があります：

  o  SP の bit 6 は常に外れていなければなりません。このジャンパが入って
     いると、SROM[Serial ROM]のミニデバッガが起動します。

  o  SP の bit 7 を入れると、 TOY clock の起動選択メモリに保存されている
     番号のイメージが起動します。

  o  SP の bit 7 を外すと、フラッシュメモリの先頭に入っているイメージが
     起動します。

  bit 7 を外すと、常にフラッシュメモリの最初のイメージ、すなわちデバッグ
  モニタが起動します。 bit 7 を入れると、 TOY clock に書かれた番号に従っ
  て起動するイメージが選択されます。デバッグモニタ、 Windows NT ARC
  ファームウェア、 Milo それぞれで起動する順番を指定できますが、十分注意
  して使わねばなりません。特に、Windows NT ARC ファームウェアを動かした
  直後には、起動するイメージとして Milo を選ぶことができません(??)。次に
  選べるのは デバッグモニタか Windows NT ARC ファームウェアだけです。

  評価用ボードデバッグモニタで Milo をフラッシュメモリに書き込むために
  は、フラッシュメモリ用のイメージが必要です。普通にイメージを作ると
  milo.rom という名前になりますが(??)、ボードに付いてくるデバッグモニタ
  にある makerom ツールを使ってイメージを作ることもできます：
      > makerom -v -i7 -l200000 Milo -o mini.flash

  (makerom と打てば引数の意味が出てきます。 7 は SROM が使う[SROM が TOY
  Clock の NVRAM の内容を見て、起動するフラッシュメモリイメージを起動し
  ます] フラッシュメモリのイメージ番号で、 -l200000 はイメージを
  0x200000 に読み込むことを意味します。)

  デバッグモニタの flload や netload といったコマンドを使って、イメージ
  をメモリの 0x200000 に読み込み、次のようにしてフラッシュメモリに書き込
  みます：

            AlphaPC64> flash 200000 8

  (200000 は書き込むイメージがメモリのどこにあるかを表し、 8 はイメージ
  を書き込むセグメントの番号を表します。フラッシュメモリには 1024*64 バ
  イトのセグメントが 16 個あり、デバッグモニタはセグメント 0 に、
  Windows NT ARC ファームウェアはセグメント 4 にあります。)

  SROM がイメージを起動できるように、その番号を TOY clock に書き込みま
  す：

            AlphaPC64> bootopt 131

  (131 は 3 番目のイメージという意味です。 129 は 1 番目、130 は 2 番
  目、というふうに番号付けされています。)

  電源を切って、ジャンパ 7 を on にして電源を入れなおし、 Milo が起動す
  るかどうか見てください。起動しなかった場合はジャンパ 7 を off に戻して
  デバッグモニタを起動しましょう。

  5.6.3.  EB66+

  EB66+ にも他の Alpha 評価用ボードと同じように評価用ボードデバッグモニ
  タが付いていますので、同じようにして Milo を読み込むことができます (``
  デバッグモニタから Milo を読み込む''を参照)。また、これらのボードの亜
  流のボードは、ほとんど全部といっていいほど NT ARC ファームウェアを載せ
  ています (``Windows NT ARC ファームウェアから Milo を読み込む''を参
  照)。 Milo が動けば Milo からフラッシュメモリマネージメントユーティリ
  ティが実行できますので、Milo をフラッシュメモリに書き込むことができま
  す (``フラッシュメモリマネージメントユーティリティの実行''を参照)。こ
  のシステムは Milo の環境変数に対応しています。

  これらのシステムはフラッシュメモリ上に複数のブートイメージを持ってお
  り、その起動の順番をジャンパで設定することができます。 Alpha チップを
  上にしたときに、ボードの下の真中あたりに、 2 つのジャンパのある J18 と
  J16 というバンクがあります。これを使って、 TOY clock の NVRAM に保存さ
  れている番号のイメージを起動するか、フラッシュメモリの先頭にあるイメー
  ジを起動するかを制御します。

  J18 のジャンパ 7-8 にジャンパを入れると、 NVRAM に書かれている番号のイ
  メージを起動します。 J18 のジャンパ 7-8 を外すと、評価用ボードデバッグ
  モニタを起動します。

  評価用ボードモニタを使ってイメージをフラッシュメモリに書き込む方法は、
  AlphaPC64 と全く同じです(``AlphaPC64''を参照)。

  5.6.4.  EB64+/Aspen Alpine

  このシステムは、 AlphaPC64 から Milo を入れることのできるフラッシュメ
  モリを取り除いたものです。 EB64+ には 2 つの ROM があり、ひとつには
  Windows NT ARC ファームウェアが (``Windows NT ARC ファームウェアから
  Milo を読み込む''を参照)、もうひとつには評価用ボードデバッグモニタ (``
  デバッグモニタから Milo を読み込む''を参照) が入っています。

  Aspen Alpine には Windows NT ARC ファームウェアの入った ROM しか載って
  いません。

  5.6.5.  Universal Desktop Box (Multia)

  非常にコンパクトにまとめられた 21066 ベースのシステムで、 TGA(21030)
  グラフィックデバイスが載っています。ボックスにはハーフハイトの PCI グ
  ラフィックカードがちょうど入りますが、 XFree86 が TGA に完全に対応する
  のを待ったほうが良いでしょう。このシステムには Windows NT ARC ファーム
  ウェアが載っていますので、それを使いましょう (``Windows NT ARC ファー
  ムウェアから Milo を読み込む''を参照)。

  5.6.6.  EB164

  EB164 にも他の Alpha 評価用ボードと同じように評価用ボードデバッグモニ
  タが付いていますので、同じようにして Milo を読み込むことができます (``
  デバッグモニタから Milo を読み込む''を参照)。また、これらのボードの亜
  流のボードは、ほとんど全部といっていいほど NT ARC ファームウェアを載せ
  ています (``Windows NT ARC ファームウェアから Milo を読み込む''を参
  照)。また、SRM コンソールも使うことができます (``SRM コンソールから
  Milo を読み込む''を参照)。 Milo が動けば、 Milo からフラッシュメモリマ
  ネージメントユーティリティが実行できますので、Milo をフラッシュメモリ
  に書き込むことができます (``フラッシュメモリマネージメントユーティリ
  ティの実行''を参照)。このシステムは Milo の環境変数に対応しています。

  これらのシステムはフラッシュメモリ上に複数のブートイメージを持ってお
  り、その起動の順番をジャンパで設定することができます。 Alpha チップを
  上にしたときに、ボードの下の真中あたりに、 2 つのジャンパのある J1 と
  いうバンクがあります。これを使って、 TOY clock の NVRAM に保存されてい
  る番号のイメージを起動するか、フラッシュメモリにあるイメージを起動する
  かを制御します。

  J1 のジャンパ SP-11 を入れると、 NVRAM に書かれている番号のイメージを
  起動します。 J1 のジャンパ SP-11 を外すと、評価用ボードデバッグモニタ
  を起動します。

  評価用ボードモニタを使ってイメージをフラッシュメモリに書き込む方法は、
  AlphaPC64 と全く同じです(``AlphaPC64''を参照)。

  5.6.7.  XL266

  XL266 は Avanti というシステムの一つです。このメインボードには、 Alpha
  チップとキャッシュを載せたライザカードが垂直に挿さっています。このライ
  ザカードは互換性のある Pentium ボードと差し替えることができます。

  Avanti には SRM コンソールが載っているものもありますが、 XL266 には
  Windows NT ARC ファームウェアしか載っていません (``Windows NT ARC
  ファームウェアから Milo を読み込む''を参照)。

  以下が私の調べた互換リストです：

  o  AlphaStation 400 (Avanti),

  o  AlphaStation 250,

  o  AlphaStation 200 (Mustang),

  o  XL.  XL266 と XL233 の 2 種類がありますが、速度とキャッシュの大きさ
     が異るだけです

  注意：私が Milo を開発・テストしたシステムは XL266 ですから、 XL266 に
  ついてのみにしか動作保証できません。しかし、上述のシステムは技術的には
  互換性があります。同じチップセットをサポートし、割り込みのハンドリング
  機構も同じです。

  5.6.8.  Platform2000

  233MHz の 21066 ベースのシステムです。

  6.  Milo のユーザインターフェース

  Milo をきちんとインストール・読み込み・実行できれば、 MILO (MIni
  LOader の略) というプロンプトが画面に現れます。 Milo には Linux カーネ
  ルイメージを起動するための簡単なインターフェースが備わっています。コマ
  ンドの概略を見たければ "help" とタイプするのが良いでしょう。

  6.1.  "help" コマンド

  たぶん Milo で最も便利なコマンドでしょう：

  MILO> help
  MILO command summary:

  ls [-t fs] [dev:[dir]]
                      - List files in directory on device
  boot [-t fs] [dev:file] [boot string]
                      - Boot Linux from the specified device and file
  run [-t fs] dev:file
                      - Run the standalone program dev:file
  show                - Display all known devices and file systems
  set VAR VALUE       - Set the variable VAR to the specified VALUE
  unset VAR           - Delete the specified variable
  reset               - Delete all variables
  print               - Display current variable settings
  help [var]          - Print this help text

  Devices are specified as: fd0, hda1, hda2, sda1...
  Use the '-t filesystem-name' option if you want to use
    anything but the default filesystem  ('ext2').
  Use the 'show' command to show known devices and filesystems.
  Type 'help var' for a list of variables.

  注意：bootopt コマンドは AlphaPC64 (互換)システムにのみ存在します。

  デバイス：デバイスを使用可能にするコマンドを実行するまでは、初期化され
  たデバイスがないというメッセージが出ます。まず show、ls、boot もしくは
  run というコマンドで Milo に入っているデバイスを初期化します。デバイス
  名は Linux と全く同じになっています。最初の IDE は 'hda' ですし、その
  最初のパーティションは 'hda1' です。 show コマンドを使えば、どのデバイ
  スが利用可能か表示されます。

  ファイルシステム： Milo は MSDOS、EXT2、ISO9660 ファイルシステムに対応
  しています。デバイスが利用可能な状態になっていれば、そのファイルシステ
  ム上にあるイメージを list したり boot したり run したりできます。 Milo
  のデフォルトのファイルシステムは EXT2 で、それ以外のファイルシステムを
  使うときには Milo に指定せねばなりません。ファイル名を使うコマンドでは
  -t [filesystem] というオプションを使ってファイルシステムを指定できま
  す。 SCSI CD ROM の中身を見たいときには次のようにタイプします [訳
  注：scd0 ではなく sr0 の場合もあります
  (linux/Documentation/devices.txt を参照)]：

            MILO> ls -t iso9660 scd0:

  変数： Milo にはブートプロセスを補助する変数があります。 Milo を
  Windows NT ARC ファームウェアから読み込む場合は、ファームウェアによっ
  て起動オプションの変数が設定されます。 AlphaPC64 のような一部のシステ
  ムでは、変数はブートごとに変化しません [訳注：Milo がフラッシュメモリ
  にある場合は変数が初期化されない(??)]。変数には次のようなものがありま
  す：

       MILO> help var
       Variables that MILO cares about:
         MEMORY_SIZE      - System memory size in megabytes
         BOOT_DEV         - Specifies the default boot device
         BOOT_FILE        - Specifies the default boot file
         BOOT_STRING      - Specifies the boot string to pass to the kernel
         SCSIn_HOSTID     - Specifies the host id of the n-th SCSI controller.
         AUTOBOOT         - If set, MILO attempts to boot on powerup
                            and enters command loop only on failure.
         AUTOBOOT_TIMEOUT - Seconds to wait before auto-booting on powerup.

  6.2.  Linux の起動

  boot コマンドはデバイスから Linux カーネルを起動します。 Linux カーネ
  ルは、EXT2 フォーマットの SCSI-HDD/IDE-HDD/フロッピーディスクか、
  ISO9660 フォーマットの CD の上になければなりません。イメージは gzip で
  圧縮されていてもよく、 .gz という拡張子であれば圧縮ファイルだとみなさ
  れます。

  起動しようとしている Linux カーネルのバージョンと Milo のバージョンが
  同じかどうか確認しておきましょう。次のコマンドで Linux を起動します：

            MILO> boot [-t file-system] device-name:file-name [[boot-option] [boot-option] ...]

  device-name は使用するデバイスで、 file-name は Linux カーネルのファイ
  ル名です。それ以降の引数は Linux カーネルに直接渡されます。

  もし RedHat をインストールしているならば、次のようにしてルートデバイス
  を指定しなければならないでしょう：

            MILO> boot fd0:vmlinux.gz root=/dev/fd0 load_ramdisk=1

  Milo には vmlinux を作るときに設定したブロックデバイスが自動的に入って
  います。私はフロッピードライバと IDE ドライバ、NCR SCSI ドライバを試
  し、うまく動いています。 SCSI コントローラのホスト ID がきちんと設定さ
  れていることも重要です。 MILO のデフォルトのホスト ID は 7 です。普通
  はうまくいくはずが、明示的にホスト ID を指定することもできます。 n 番
  目の SCSI コントローラ指定するには、環境変数 SCSIn_HOSTID を希望の値に
  セットします。例えば最初の SCSI コントローラのホスト ID を 7 に設定し
  たい場合は、 MILO のプロンプトで下のコマンドを実行します：

       setenv SCSI0_HOSTID 7

  6.3.  Linux の再起動

  動作中の Linux システムを再起動するには、 shutdown -r nowというコマン
  ドを実行します。すると、Linux カーネルは HALT CallPAL エントリポイント
  を経由して Milo に制御を戻します。 Milo がメモリ内に自分自身の圧縮され
  たコピーを残しているのはこのためです。そして HWRPB (HardWare Restart
  Parameter Block) に保持されている情報をもとに、システムが再起動中であ
  ることを検知します。それから前回 Linux カーネルを起動したのと同じコマ
  ンドで再起動を始めます。このプロセスを中止したり別のカーネルを起動した
  りするために、 30 秒間のタイムアウトがあります。

  6.4.  "bootopt" コマンド

  AlphaPC64、EB164、EB66+ のようなフラッシュメモリが付いているシステムに
  はいくつかの起動選択肢が用意されており、 bootopt コマンドによって変更
  できるようになっています。このコマンドは一つの引数を取ります。システム
  の電源をリセットしたり入れ直したりした時に起動するイメージのタイプを
  10 進数で指定します：

  0：評価用ボードデバッグモニタを起動する

  1：Windows NT ARC ファームウェアを起動する

  フラッシュメモリから Milo ファームウェアを起動するために、 N 番目のイ
  メージを表すブートオプションを指定せねばなりません。これは N に 128 を
  足した値になります。つまり、もし Milo が 3 番目のイメージであれば、次
  のコマンドを使います：

            MILO> bootopt 131

  注意： このコマンドを使用する際には十分気を付けて下さい。評価用ボード
  デバッグモニタを起動するために bootopt 0 とするのはやめたほうが良いで
  しょう。システムのジャンパを使えば同じことができます。

  7.  フラッシュメモリマネージメントユーティリティの実行

  フラッシュメモリマネージメントユーティリティを実行するには run コマン
  ドを使います。実行する前に、updateflash プログラムが入った Milo を利用
  可能なデバイスに置いておかねばなりません。 updateflash プログラムは
  vmlinux と同じように gzip で圧縮しておくことができます。フラッシュメモ
  リマネージメントユーティリティを実行するには、次のようにして Milo の
  run コマンドを実行します：

            MILO> run fd0:fmu.gz

  フラッシュメモリマネージメントユーティリティの初期化がすむとフラッシュ
  メモリデバイスに関する情報がいくつか表示され、コマンドプロンプトが現れ
  ます。ここでも help コマンドが有用です：

       Linux Milo Flash Management Utility V1.0

       Flash device is an Intel 28f008SA
         16 segments, each of 0x10000 (65536) bytes
       Scanning Flash blocks for usage
       Block 12 contains the environment variables
       FMU>

  注意： AlphaPC64 などのシステムには、複数のフラッシュメモリブロックと
  環境変数を保存する場所があります。フラッシュメモリマネージメントユー
  ティリティは Milo の環境変数が保存されているブロックを探します。もしそ
  のようなブロックがすでに存在していれば、それがどこに存在しているか表示
  されます。そうでない場合は、 environment コマンドを使って初期化するブ
  ロックを指定せねばなりません。上の例ではフラッシュメモリブロック 12 に
  Milo の環境変数が保存されています。

  7.1.  "help" コマンド

       FMU> help
       FMU command summary:

       list                - List the contents of flash
       program             - program an image into flash
       quit                - Quit
       environment         - Set which block should contain the environment variables
       bootopt num         - Select firmware type to use on next power up
       help                - Print this help text
       FMU>

  注意：environment コマンドと bootopt コマンドは、
  EB66+、AlphaPC64、EB164 (互換)システムのみで使用可能です。

  7.2.  "list" コマンド

  "list" コマンドは現在のフラッシュメモリの使用状況を表示します。 2 つ以
  上のフラッシュメモリブロックがある場合には、それぞれのブロックの使用状
  況が表示されます。下の例では、 Windows NT ARC ファームウェアがブロック
  4 から 7 とブロック 15 を使用しています。

  FMU> list
  Flash blocks:  0:DBM  1:DBM  2:DBM  3:WNT  4:WNT  5:WNT  6:WNT  7:WNT  8:MILO
          9:MILO 10:MILO 11:MILO 12:MILO 13:U 14:U 15:WNT
  Listing flash Images
    Flash image starting at block 0:
      Firmware Id:  0 (Alpha Evaluation Board Debug Monitor)
      Image size is 191248 bytes (3 blocks)
      Executing at 0x300000
    Flash image starting at block 3:
      Firmware Id:  1 (Windows NT ARC)
      Image size is 277664 bytes (5 blocks)
      Executing at 0x300000
    Flash image starting at block 8:
      Firmware Id:  7 (Milo/Linux)
      Image size is 217896 bytes (4 blocks)
      Executing at 0x200000
  FMU>

  7.3.  "program" コマンド

  フラッシュメモリマネージメントユーティリティは圧縮された Milo のフラッ
  シュイメージを持っています。 "program" コマンドはこのイメージをフラッ
  シュメモリに書き込みます。このコマンドを実行する前に "list" コマンドを
  使って Milo をどこに入れることができるか見ておきましょう。すでに Milo
  がフラッシュメモリに入っている場合には、上書きするかどうか訊ねられま
  す：

       FMU> program
       Image is:
           Firmware Id:  7 (Milo/Linux)
           Image size is 217896 bytes (4 blocks)
           Executing at 0x200000
       Found existing image at block 8
       Overwrite existing image? (N/y)? y
       Do you really want to do this (y/N)? y
       Deleting blocks ready to program: 8 9 10 11
       Programming image into flash
       Scanning Flash blocks for usage
       FMU>

  電源を切る前にこれが終わるのを待ちましょう。

  注意: すでに存在しているフラッシュメモリイメージを上書きすると、システ
  ムを壊してしまうかもしれないのはわかっていますよね。決してデバッグモニ
  タを上書きしないようにしましょう。

  7.4.  "environment" コマンド

  Milo の環境変数が保存されているフラッシュメモリブロックを選択します。

  7.5.  "bootopt" コマンド

  Milo の "bootopt" コマンドと同じです (``"bootopt" コマンド''を参照)。

  7.6.  "quit" コマンド

  あまり意味のないコマンドです。フラッシュメモリマネージメントユーティリ
  ティから Milo などに戻る唯一の方法は、システムを再起動することです。

  8.  制限事項

  残念ながら Milo はまだ完璧ではなく、いくつかの注意すべき制限がありま
  す。

  Milo は Linux 以外のオペレーティングシステムを読み込むことはできませ
  ん。 Milo はイメージを読み込んだあとに特定の場所 (Linux では
  0xFFFFC0000310000) から実行するからです。これはフラッシュメモリマネー
  ジメントユーティリティを実行する仕組みです。

  miniboot/palcode/blah にある PALcode のソースは間違ってはいないのです
  が、最新の gas を使って作ると変になります。 Alpha 評価用ボードツール
  セットにある古い a.out の gas を使えば大丈夫です。私は新しい gas を誰
  かにフィックスしてもらおうとしています。そうしているうちに、サポートし
  ているボードに対応したコンパイル済みの PALcode が出て、 David
  Mosberger-Tang 氏がフィックスされた gas を彼の ftp サイトに置いてくれ
  ていました。

  9.  解決済みの問題

  ここには多くの人が経験した問題とその解決方法が書いてあります。

  ・評価用ボードデバッグモニタから MS-DOS フロッピーを読む

  AlphaPC64 などの Alpha 評価用ボードに載っているデバッグモニタを使って
  フロッピーディスクからファイルを読む際の問題が報告されています。ふつう
  デバッグモニタは最初の数セクタを読めるのですが、 "bad sectors" などが
  あると無限ループに陥ります。デバッグモニタが予想している DOS ファイル
  システムと Linux 上の DOSFS の実装が違うことが原因であることがわかって
  います。もしこの問題が起こったら、 DOS を使ってフロッピーに書き込むの
  がてっとり早いです。例えば milo.cab の読み込みに失敗したら、 DOS マシ
  ンを起動してフロッピーを入れて次のようにします：

            copy a:milo.cab c:
            copy c:milo.cab a:
            del c:milo.cab

  もう一度フロッピーから起動しましょう。問題ないはずです。

  ・Milo が O> という文字を表示しつづけ、入力を受けつけなくなる

  この現象は、主に  Milo が 2 番目のコンソールとして COM1 を使うように作
  られている場合に起こります。この場合、Milo は COM1 を入出力に使ってい
  ます。これはデバッグには非常に便利ですが、接続されたターミナル以外にデ
  バイスがある場合はそれほど便利ではありません。もしこの問題が起こった
  ら、デバイスを切離すか Linux カーネルが起動するまで何度か電源を切って
  ください。 Linux が動けば問題はなくなるでしょう。

  10.  謝辞

  次の人々に感謝します：

  o  Eric Rasmussen and Eilleen Samberg the authors of the PALcode,

  o  Jim Paradis for the keyboard driver and the original MILO
     interface,

  o  Jay Estabrook for his help and bugfixes,

  o  David Mosberger-Tang for the freeware BIOS emulation and his
     support and encouragement,

  o  Last (and not least) Linus Torvalds for the timer code and his
     kernel.

  [訳注：日本語への翻訳にあたり、 Linux-Alpha-JP メーリングリストのメン
  バの方々より数々の有用な助言を頂きました。感謝の意を表します。]

  Milo でやらなければならないことはまだまだあります。もし自分で何かつけ
  加えたいと思ったら、私 (david.rusling@reo.mts.dec.com
  <mailto:david.rusling@reo.mts.dec.com>) に連絡してください。同じことを
  している人がいるかもしれません。

  最後に、このような素晴しいチップを開発した (そしてこの仕事に報酬を出し
  てくれた) Digital 社に感謝します。

