F.1. ブートローダーの作者へのお願い

ブートローダーでシリアルコンソールをサポートしていることが、 非常に役立っています。サポートしてくれて感謝します。

ブートローダーは 8250A UART と、 そのプログラム互換の後継である、 825101645016550、および、 16750 をサポートしてください。 IBM PC/XT で使われているシリアルチップ 8250 (Aは付かない) と、その後継である 8250B のサポートは不要です。 8250A のデータシートは 82C50A CMOS Asynchronous Communications Element にあり、インテルの正誤表、 82510 PC Software Compatibility で更新されています。 16550 のデータシートは、 PC16550D Universal Asynchronous Receiver/Transmitter with FIFOs です。

シリアルポートとシリアルパラメータを設定するため、 Linux のブートローダーのほとんどは、 カーネルの コンソールパラメータをモデルにした構文を使っています。 いずれにせよ、ユーザーはカーネル構文を覚える必要がありますから、 このまま一貫性を維持するのはうまいやり方だろうと思います。

デフォルト値は 9600bps、 データは 8 ビット、 パリティ無し、 ストップビットは 1 ビット それに CTS/RTS のフロー制御にしてください。 こうしておけば、 シリアルコンソールを使う他のプログラムとの相互運用性が最大になります。

低速もどうか無視しないで下さい。ニューギニア高地の、 徒歩で三日かけて登るような山中にコンピュータがある場合、 リモートのシリアルコンソールは、一番価値があります。 天候条件が悪い中で、 短波(HF) 無線で 75bps を越える速度を出すのは困難です。

モデムのステータスラインを使う場合は、従来のやり方に従って下さい。 着信のステータス(DSRDCD) や、ハンドシェークライン(RTS)を無視していても、 少なくとも送出するステータス(DTR) と、ハンドシェーク (CTS のラインは、アサートするようにして下さい。 正しく設定したモデムは、 DTR が落ちている時に、着信は受けません。 それに DTR を落とすと、 モデムがハングアップすることになります。

BIOS が、すでに UART を初期化してあり、 ブートローダーにそのことを知らせることができる、 設定オプションを用意しているかもしれません。 このことを考えに入れて下さい。 ブートローダーが UART を初期化すると、 DTR が落ちて、ラインはハングアップします。 場合によっては、ハングアップするたびに衛星回線を再予約しないと、 別の電話が着信できなくなります。

ラインノイズに関する要件を満たして下さい。ブートローダーがスタートして、 それから無意味な文字を 2、3 秒ごとに出している、と想像してみてください。 これは無論まずいのですが、 もしマシンが、ブートローダーのプロンプトで、立往生したままだとすると、 モデム内の障害を、遠隔地から診断して、修復するのは困難です。 解決方法は、タイマーの時間切れで、 デフォルトイメージをブートすることです。 もしユーザー(あるいはラインノイズ)がタイプを始めたとしても、 ブートは始まります。 例えば、ブートローダーの設定は以下のようにできます。

# 30分後にとにかくマシンをスタートさせる
#   30 * 60 秒 * 10 分の 1 秒単位
lifetime 18000

デフォルトでは ライフタイマーは無いはずです。 このタイマーは、利用率が高いアプリケーションでも役に立ちます。 利用率が 99.999% になるように計画されている環境でマシンを使う場合、 この "lifetime"値は、3 分前後に設定してください。

BIOS から読み込んだ情報が正しいことを確認して下さい。例えば、 もしシリアルポートのレジスタアドレスは 0x000 だと、 BIOS の拡張データエリアが示唆している場合は、 レジスタを初期化しようとしないでください。