Loadlin v1.5 のドキュメント類

Hans Lermen

こじま みつひろ - 日本語訳

kojima@komae.denken.or.jp

1994/08/07

Loadlin v1.5 のドキュメント類

Note: この文書は、Loadlin v1.5 の付属文書のうち、README.1ST, MANUAL.TXT, PARAMS.DOC, QUICKSTA.RT を翻訳したものです。 原文の日付は 1994年8月27日、訳文の日付は 1995年2月13日 となっています。Loadlin は 2001年9月時点で v1.6 が出ています。なお、本書は、 訳者小島三弘さんが作成された文書を SGML に変換したものです。 (JF Project)


Table of Contents
1. REAEME.1ST
2. MANUAL.TXT
2.1. Copyright
2.2. なぜ(LILO ではなく) LOADLIN や BOOTLIN を使うのか?
2.3. BOOTLIN があるのになぜ LOADLIN か?
2.4. LOADLIN の使い方
2.5. LOADLIN のコマンドラインパラメータ
2.6. 問題が起れば
2.7. UMSDOS システムをブートするためのプリプロセッサ LOADLINX
2.8. コメントやバグレポートの送り先
2.9. 協力者と謝辞
3. PARAMS.DOC
3.1. loadlin のコマンドパラメタ
3.2. コマンドパラメタの詳細
4. QUICKSTA.RT
5. 日本語訳について

Chapter 1. REAEME.1ST

LOADLIN.EXE は (DOS で動く) LINUX カーネルイメージのローダーです。 (カーネルのコマンドラインを完全にサポートしています)

(C) 1994 Hans Lermen (lermen@elserv.ffm.fgan.de)
(翻訳:こじまみつひろ kojima@komae.denken.or.jp)

LOADLIN は F.Coutant 作の BOOTLIN と同じ原理に基づいていますが、よりエ ラーチェックを強化し、カーネルの持つ「コマンドライン機能」を完全にサポー トしています。レスポンスファイルを利用することも可能で、もしコマンドラ インが (DOS の制限である) 128 バイトを越えても大丈夫です(1.0.5 よりも古 いカーネルでは、80 バイト以上の文字列を渡すためにはパッチが必要です)。 UMSDOS では、LOADLINX プリプロセッサが DOS 風のドライブ名を /dev/xxxx の形に変換します。

昔からの LOADLIN ユーザーへ: LOADLIN-1.5 は、 BIOSINTV/REALBIOS なしに動きます!

ローダーのプログラムは以下の条件の元で DOS のプロンプトか CONFIG.SYS から起動できます。

  1. プログラムがロードされるメモリ番地と 0x90000 番地の間に圧縮された カーネルイメージを置けるスペースがあること(ヘッダーとセットアップ プログラムは別にして)

  2. A) CPU が仮想 8086 モードにないこと

    か、

    B) EMS ドライバが VCPI をサポートしていること

手早く始めるには QUICKSTA.RT を、 より詳しい説明は MANUAL.TXT を、 それぞれ読んでください。

LODLIN15.TGZ の中身
-------------------

  README.1ST      今読んでるこれ!
  QUICKSTA.RT     Pat Volkerding の LODIN14.TXT の引用
  MANUAL.TXT      マニュアル
  PARAMS.DOC      Linux コマンドラインパラメータの説明
  TEST.PAR        レスポンス(パラメータ)ファイルの例
  CHANGES         LOADLIN の歴史
  LINUX.BAT       Linux を起動するための DOS のバッチファイルの例
  LOADLIN.EXE     ローダー
  LOADLIN.ASM     ソースコード
  BIOSINTV.SYS    VCPI 経由でロードするためのデバイスドライバ
  BIOSINTV.ASM    そのソース
  REALBIOS.EXE    本物の BIOS 割込みベクター/データをファイルに書きだす
                  ためのプログラム
  REALBIOS.C      そのソース
  BOOTSECT.BIN    上記のデータを使うフロッピー用のブートセクター
  BOOTSECT.ASM    そのソース
  LOADLINX.EXE    UMSDOS をサポートしたプリプロセッサ
  LOADLINX.C      そのソース
  MAKEFILE        TASM, TLINK 用の MAKEFILE
  BOOTING.DOC     いくつかの有益な情報
  COPYING         FSF の一般許諾契約(Gnu Public License)
  KERNEL/*        boot/setup.S に対するパッチ


Chapter 2. MANUAL.TXT

LOADLIN と LOADLINX ユーザーガイド(94-08-27) (日本語版/95-02-13)


2.1. Copyright

LOADLIN v1.5 (C) 1994 Hans Lermen (lermen@elserv.ffm.fgan.de)
(翻訳:こじまみつひろ kojima@komae.denken.or.jp)

このプログラムは free software です。再配布や修正は Free Software Foundation から出されている GNU 一般許諾契約(Gnu General Public Licence)のバージョン 2 あるいは(あなたの判断で)より新しいバージョン に従います。

このプログラムは役に立つことを期待して配布していますが、一切の保証 はありません;購入の可能性や特定の目的に適合するかについての保証も ありません。より詳しくや GNU 一般許諾契約をご覧ください。

GNU 一般許諾契約のコピーはこのプログラムに付いているはずですが、も し見付からなければ Free Software Foundation(675 Mass Ave, Cambridge, MA 02139, USA.) に連絡してください。

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation, either version 2 of the License or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You may have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.


2.2. なぜ(LILO ではなく) LOADLIN や BOOTLIN を使うのか?

LOADLIN や BOOTLIN はハードディスクから Linux(0.99.14 以上)をブートす るためのもっとも安全な方法です。多くの Linux の初心者は、詳しいけれど 長すぎる [1] LILO のドキュメントを読むのに耐えきれず、LILO を誤って動か し、、、バン !! DOS とはさようなら、、、してしまいます。

(FDISK /MBR はディスクを修復するためのスーパーマンではありません)


2.3. BOOTLIN があるのになぜ LOADLIN か?

BOOTLIN は明確で単純、きわめて効率的です。BOOTLIN のソースコードにある 情報の多くが LOADLIN の基礎になっています。

しかし、LOADLIN ではカーネルに「コマンドライン・パラメーター」を渡すこ とが可能で、それらのパラメーターによって Linux の振舞い(ルートデバイス、 ビデオモード、ドライバ類、などなど)を設定することができます。また、パ ラメーターファイル(コマンドラインパラメーターを収めたファイル)を使うこ とも可能で、DOS の 128 バイトというコマンドラインの制限に悩まされずに 済みます。

Internet 上のどこかに F.Coutant 作の BOOTLIN の新しいバージョンがある かも知れませんが、私は見つけていません。だから、私は LOADLIN を 0 から 書きはじめ、めったにない状況に対するテストもいろいろやってみました。 LOADLIN は DOSのドライブから UMSDOS ベースのシステムを起動することも可 能です(このためには LOADLINX というプリプロセッサ・ユーティリティを使っ てください)

ある種のオプション(-v, -t, -d)を使うとデバッグ情報が出力されます。もし 何か問題が起きたときは、その情報を頼りに LOADLIN が実際に何をやってい るのか確認することができるでしょう。

LOADLIN は VCPI サーバーが存在している場合、仮想 86 モード(EMS ドライ バを使っている時はこれが普通です)から起動することも可能です。


2.4. LOADLIN の使い方

注意: LOADLIN はあなたのコンピュータを「論理的に再起動」するプログラムであり、 DOS は Linux で完全に上書きされます。もし DOS に戻りたければ、Linux の "reboot" コマンドを使う必要があります。


2.4.1. 必要なもの

  1. 386 以上の CPU(当然ですね)

  2. 0.99pl14 以上の圧縮された linux のカーネルイメージ

  3. 以下を含む LODLIN15 パッケージ

      LOADLIN.EXE
      MANUAL.TXT (このファイル)
      TEST.PAR(パラメーターファイルの例)
      PARAMS.DOC

    以下のものは必ずしも必要なわけではありません。

      LOADLINX.EXE
      BIOSINTV.SYS
      REALBIOS.EXE
      BOOTSECT.BIN


2.4.2. DOS プロンプトからの起動

2.4.2.1. 手早く始めるために

これから先、LODLIN15.TGZ を C:\LOADLIN に展開したとして話をすすめます。

バージョン 1.5 になって、1.4 以下のバージョンで必要だった各種の設定は、 ほとんど全ての機種で不要になりました。スペインの天才、Javier Achirica が新しい方法を考えだして、 Linux のセットアップコードがプロテクトモー ドへ移行する前に割り込むことが可能になりました。私はこの方法を "Javier 法" と名付け、もし設定が行われなかった場合はこの方法を使うことにしまし た。

DOS プロンプトから、例えば、こんなふうに入力します:
  C:> CD \LOADLIN
  C:\LOADLIN> LOADLIN zimage /dev/hdb1 ro vga=extended
注意:以前からの LOADLIN ユーザーは -ja オプションを使って BIOSINTV/REALBIOS を無効にするか、それらを削除すべきでしょう:
  C:\LOADLIN> LOADLIN zimage -ja /dev/hdb1 ro vga=extended
あるいは、もし DOS のコマンドラインの上限の 128 バイトを越えるようなパ ラメータを渡す場合は、
    C:\LOADLIN> LOADLIN @params
とします。パラメータファイルの一例が "test.par" です。ぜひ読んでみてく ださい。現時点では LOADLINX はパラメータファイルをサポートしていません。

[訳注:6.1 章に LOADLINX でパラメータファイルを使う例が出てくるので、 今のバージョンではサポートしていると思います(私は試していませんが)]

(カーネルソースから抜きだした)より詳細なコマンドラインのパラメーターに ついては PARAMS.DOC にあります。


2.4.2.2. 簡単なヘルプ

  C:\LOADLIN> loadlin <enter>
とすることで、オンライン・ヘルプと設定が示されます。こういう風にしたら、 もう少し使いやすいかも。
  C:\LOADLIN> loadlin | more <enter>
こうすると、このような出力が示されるはずです(私のマシンからのものです)

  LOADLIN v1.5 (C) 1994 Hans Lermen (lermen@elserv.ffm.fgan.de)

  USAGE:
    LOADLIN @params
    LOADLIN [zimage_file] [options] [boot_params]
      without any params, LOADLIN displays this help message.
      @params:
         params is a DOS file containing all other options
      zimage_file:
         DOS file name of compressed Linux kernel image
      options:
         -v        verbose, show information on params and configuration
         -t        test mode, do all but starting Linux, also sets -v
         -d file   debug mode, same as -t, but duplicates output to "file"
                   (for -v, -t, -d please see 5.5)
         -rb       search for REALBIOS before BIOSINTV
         -rx       don't check REALBIOS' ROM-date
                   (for -rb, -rx please see 5.4.2)
         -ja       use Javier's method, disable BIOSINTV and REALBIOS.
                   (please see 5.4)
         -clone    use alternate CPU-check, assume we have a 486 clone
                   (please see 5.4.4)
         -oldxd    use old /dev/xda,xdb numbering 0xC00,0xC40,
                   newer kernels ( >= 1.1.0 ) have 0xD00,0xD40.
                   (please see 5.3.1)
         -n        no translation for root=...  (goes into command_line)
                   (please see 5.3)
      boot_params:
         root=xxx  filesystem to be mounted by Linux as "/"
              xxx = hex number (e.g. root=201 for /dev/fd1)
                  = /dev/mmmn (e.g. root=/dev/hda2)
                         mmm = fd,hda,hdb,sda,sdb...
                         n   = 1..10.. decimal
                         n   = 01..0a.. or 0x1..0xa.. or a..f hexnumber
                   (please see 5.3)
         ro        mount "/" readonly
         rw        mount "/" read/write
         ramdisk=x install ramdisk of size x Kbytes.  If also root=/dev/fdx,
                   then LOADLIN prompts for a floppy (copied into ramdisk)
                   (please see 3.2.4)
         vga=xxx   vga mode (e.g. -3..0.., ask, normal, extended)
         (for more boot params see file PARAMS.DOC)

  Your current DOS/CPU configuration is:
    load buffer size:   0x775F0   setup buffer size:   0x1000
    total memory:     0x0FE0000
    CPU is in V86 mode
    BIOSINTV.SYS:   NO
    SetupIntercept: YES, patching setup code
    stat4: VCPI_present, physmap=logmap, all OK for switch to realmode
    input params size 0x0000
    input params:

    LOADLIN started from DOS-prompt

注記: (-t のような)LOADLIN 自身のオプションは全て Linux のコマンド ライン・パラメーター以前にないといけません。


2.4.2.3. バッチファイル(LINUX.BAT)からの起動

ほとんどの DOS ユーザーは(SMARTDRV のような)ディスクキャッシュを利用し ているでしょう。もし、キャッシュプログラムが "write-behind" キャッシュ を使っていれば、LOADLIN を呼ぶ前にまだ書きこまれていないキャッシュバッ ファを書きだしておく必要があります。

例:
  C\LOADLIN> smartdrv /C    こうすれば、キャッシュバッファがディ
                            スクに書きこまれ(sync)ます。たいてい、
                            DOS 6.2 では不要のはずですが、やって
                            おいて害にはなりません)
  C\LOADLIN> loadlin ....
これは、以下のようなバッチファイルを作っておくほうがスマートなやり方で しょう。
   +-------------------- start of LINUX.BAT
   |
   |  SMARTDRV /C
   |  C:\LOADLIN\LOADLIN C:\LOADLIN\ZIMAGE root=/dev/hdb2 ro vga=3
   |
   +-------------------- end of LINUX.BAT
このようなファイルを作っておけば、単に、
  C> linux
とするだけで、自動的に Linux がスタートします。

LINUX.BAT の一例を LOADLIN パッケージに入れておきました。


2.4.2.4. フロッピーとラムディスク

もし LOADLIN に root=/dev/fdx というコマンドと共に ramdisk=xxxx という コマンドを渡せば、LOADLIN はカーネルイメージをメモリにロードし、root floppy を挿入するように、という旨のメッセージを出して一時停止します。

こうすれば DOS を起動するフロッピー(と LOADLIN の起動)とルートディスク が同じフロッピードライブを利用することができます。

もちろん、このためにはブート用に 2 枚のフロッピーが必要ですが、Linux はどんどん大きくなって、もはやカーネルイメージとルートファイルシステム を一枚のフロッピーに同居させることは不可能になっています。LOADLIN を使 えば、お手元のディスクドライブの設定が(Linux の各種)ディストリビューショ ンと違っていても、トリックを使うことなくインストールすることができます。

例:LST 1.07 ディストリビューションは 3.5" フロッピーで配布されていま すが、手元のドライブ A: は 5.25" です。

Slackware 2.0.0 はさまざまなドライブの設定に対応した大きなディレクトリ ツリーを持っています。LOADLIN を用いれば、そのうちのイメージディスクと 必要なルートディスクだけで利用できます。

ちなみに:LOADLIN は Slackware と共に配布され、UMSDOS をインストールす れば自動的に組みこまれます。


2.4.2.5. システムの制約

  1. 1. 圧縮されたカーネルイメージをロードするのに十分なメモリ(LOADLIN の開 始位置と 090000h の間に必要です)。

    LOADLIN の出力メッセージのうち、"load buffer size" が、あなたのシステ ムに実際に存在するメモリの大きさを示しています。

    セットアップ・プログラムと LOADLIN 自身は 090000h から 09A000h に展開 されるので、640K のベースメモリは必須です。Linux 1.1.43 以後、セットアッ ププログラムはもはや 2K 以内には収まらなくなったので、サイズも可変にさ れ、時と共に大きくなっています。現在(1.1.47)では、セットアッププログラ ムは 5*512 バイト、一方、LOADLIN の持つセットアッププログラム用のバッ ファは 31*512 バイトですので、まだしばらくの間は大丈夫でしょう。

    LOADLIN の "setup buffer size" に示される値が、セットアッププログラム 用のバッファサイズです。

    640 K のメモリのうち、上位 20 K バイトが残っていれば、BIOS と上位メモ リに読みこまれるドライバ用のデータ領域として、多分十分でしょう。

  2. DOS プログラムはいわゆるリアルモード(あるいは 386 以上のマシンでは 仮想 86 モード)でのみ稼働します。

    一方、Linux はプロテクトモードで動き、カーネルは特権レベル 0(P0, スー パーバイザーモード)に入れなくてはなりません。ところが、(DPMI の場合の ように) V86 モードのサーバーが許可しなければ、V86 モードからプロテクト モード(P0)へスイッチすることはできません。

    このため、

    • リアル 86 モードから開始する(EMS ドライバや WINDOWS は使えません)

    • EMS ドライバで VCPI サーバーを利用する(これでも WINDOWS は使えません)

    必要があります。EMM386 を使っている場合、NOVCI オプションは使わないで ください。NOEMS は使っても大丈夫です。

    VCPI は P0 モードも利用でき、ほとんどの EMS ドライバでもサポートされて います(もし EMS が使えるならば)が、MS-WINDOWS の元では利用できません (MICROSOFT はユーザーが P0 モードを使うことを嫌っています)。

    物理メモリと仮想メモリのマッピングも最初の 640K のRAM 領域 では同一で ある必要があります。普通はそうなっているはずですが、EMS ドライバに以下 のようなオプションを与えることで、強制的にこのように設定することができ ます。
       EXCLUDE=1000-A000     (386MAX 用)
    あるいは
       B=A000                (EMM386.EXE 用。たいていの場合は不要です)
    詳しくは EMS ドライバのマニュアルを見てください。でも、もし何か忘れて いても LOADLIN が指摘してくれるのでご心配なく。

    注意: 特に何メガバイトもメモリをつんでいるシステムの場合、プロテクトモードに 移行する前に VCPI サーバーがガーベッジコレクションを始めて、しばらく時 間がかかることもありますが、しんぼう強く待ってやってください。

  3. もちろん LOADLIN を Linux の DOSEMU から使うことはできません。例え 実行したところで、幸いなことに DOSEMU 自身が V86 チェック・インストラ クション(IOPL の変更)のために general protection fault を起して終了し てしまいます。ですから、ファイルシステムには影響しません。しかし、 Linux の DOSEMU でWINDOWS 3.0 を動かし、その DOS prompt から LOADLIN を使ったときは(...うぎゃ..)、、DOS-FAT に何が起るかわかりません。


2.4.2.6. カーネルへのパッチ?

現時点(Linux-1.1.47)では、LOADLIN を使うのに特別なパッチは必要ありませ ん。LOADLIN-1.5 から、以前には必要だった各種の設定も普通の状況では不要 になるようにしました(3.2.1 と 5.4 を見てください)。

常駐ドライバと V86 モードに関する問題に取りくんできましたが、結局 Linuxのセットアッププログラムがプロテクトモードに移行する際に何らかの 形で割りこむ形になりました。最近のカーネルを使えば、loadlin の 起動時 にセットアッププログラムのコードを解析して、(割りこむのに)必要な場所を 見つけます。これでも動きますが、きれいな処理とは言えません。最もよい方 法は、Linux のセットアッププログラム自身に割りこみのためのメカニズムを 用意すること、つまり、セットアッププログラムに LOADLIN をサポートして もらうことです。

LOADLIN/KERNEL ディレクトリに最新の(1.1.47)カーネルの setup.S に対する パッチがあります。私はこのパッチを Linus に送っており、公式のカーネル リリースに取りこまれるように希望しています。そうなるまでは、あなた自身 の手でパッチを当ててください。しかし、(LOADLIN 自身が必要な個所を解析 するので)1.1.47 以上のカーネルならば LOADLINでブートしなくなる日まで、 必ずしもパッチを当てる必要はありません。

もう一つ、initmain.dif パッチも便利です。これを当てれば、Linux が実際 に受けとったコマンドライン・パラメータを表示させることができます。


2.4.3. CONFIG.SYS からの起動

DOS のバージョン 6.0 からは MSDOS の起動時に異なる設定で起動することが 可能になりました。これは CONFIG.SYS を解釈する時に行なわれますので、 LOADLIN/LOADLINX/Linux を設定するにも便利です。

たとえ DOS をブートしたとしても、後から DOS のコマンドライン、あるいは バッチファイルから Linux を起動することも可能です。


2.4.3.1. CONFIG.SYS の例

  rem もし BIOSINTV.SYS を使うなら、最初に([MENU] の前)
  rem DEVICE=C:\LOADLIN\BIOSINTV.SYS を置いてください。
  rem でも、ほとんどの場合、これは不要です。

  SWITCHES=/F

  [MENU]
  menuitem=DOS, DOS boot
  menuitem=LINUX_1, LINUX boot (SLS 1.03)
  menuitem=LINUX_2, LINUX boot (Slackware, LST)
  menuitem=LINUX_3, LINUX boot (UMSDOS, with C: as DBLSPACE'd drive)
  menuitem=LINUX_4, LINUX boot from 3.5 inch floppy B:
  menuitem=LINUX_5, LINUX boot (Slackware, high partition number)
  menuitem=LINUX_6, Create a dump file for bug report

  [DOS]
  device=c:\dos\himem.sys
  device=c:\dos\emm386.exe 2048 ram
  DOS=HIGH,UMB
  SHELL=C:\COMMAND.COM C:\ /e:1024 /p
  ...   etc.,  etc.,  etc.

  [LINUX_1]
  shell=c:\loadlin\loadlin.exe c:\loadlin\zimage vga=ask root=/dev/hdb3

  [LINUX_2]
  shell=c:\loadlin\loadlin.exe c:\loadlin\zimage vga=-3 root=/dev/hdb2 ro

  [LINUX_3]
  rem  UMSDOS ファイルシステムは圧縮されていない drive D:(/dev/hdb1)
  device=c:\dos\dblspace.sys
  rem                     v----- LOADLINX preprocessor を使う 
  shell=c:\loadlin\loadlinX.exe d:\linux\zimage.{15 root=D: vga=ask
  rem  これは UMSDOS のファイル名---------------^^^      |
  rem  これは root=/dev/... と解釈される ----------------+

  [LINUX_4]
  shell=c:\loadlin\loadlin.exe c:\loadlin\zimage root=/dev/fd1 ramdisk=1440

  [LINUX_5]
  shell=c:\loadlin\loadlin.exe c:\loadlin\zimage root=/dev/hdb10
  rem   注記:パーティションナンバーは 10 進の 10(カーネルが解釈する 16 と
  rem   は違います)LOADLIN はこれを Slackware の /dev にある既存のデバイス名、
  rem   マイナー番号と衝突しないように翻訳します。

  [LINUX_6]
  shell=c:\loadlin\loadlin.exe c:\loadlin\zimage -d c:\dump.txt root=/dev/fd1 ramdisk=1440
  rem                                            ^^^^^^^^^^^^^^
  rem  こうすれば、デバッグ情報がこのファイルに --------^
  rem  出力されます。全て通常通りセットアップされますが、Linux はロード
  rem  されずに LOADLIN は終了します。
  rem  注意:CONFIG.SYS に [MENU] を設定しないかぎり、これは使わないこと。
  rem  さもないと、普通にブートするために DOS のシステムフロッピーが必要
  rem  になります。

  [COMMON]
  rem   ここから先にはその他の「一般的な」設定をします。


2.4.3.2. CONFIG.SYS の文法上の制限

  1. "shell=" という行にあらわれた全てのパラメータは DOS によって大文字 に変換されますが、Linux のパラメータは大文字と小文字を区別します。 LOADLIN は以下のパラメータを小文字にもどします。
       mem=...
       no387
       single
       auto
       debug
       no-hlt
       reserve=...
       hd=...
       xd=...
       bmouse=...
       max_scsi_luns=
    以下のパラメーターは、コマンドラインには展開されませんが、数値に変換さ れて、ブートセクターに渡されます。
       vga=...
       ramdisk=
       ro
       rw
    もし -n スイッチがセットされなければ、これは
      root=...
    にも適用されます。

  2. パラメーターファイルを使えば大文字/小文字の問題は避けることができま す。この場合、CONFIG.SYS ラインはこのようになります:
      [LINUX]
      shell=c:\loadlin\loadlin.exe @c:\loadlin\params
    パラメーターファイルの例が "test.par" ファイルで、詳しくはこれを読んで みてください。現在は、パラメーターファイルは UMSDOS システム用の LOADLINX ではサポートされていません。

    [訳注:先にも書きましたが、このあたりは 1.5 以前のバージョンのことで、 今の 1.5 ではサポートしているようです]


2.5. LOADLIN のコマンドラインパラメータ

もしパラメータファイルを使うなら(例えば @TEST.PAR)、このファイル名が LOADLIN のコマンドラインの最初のパラメータでなければなりません。zImage ファイル名も含む、その他のパラメータはパラメータファイルの中に記される ことになります。

Linux が起動する時、セットアッププログラム(基本的なハードウェア設定を チェックして、プロテクトモードに移行する)から runstring が渡されます。 この文字列は、コマンドラインと呼ばれていますが、コンパイル時に埋めこま れたキーワードと比較されます。あるものは(mem=, root=, ro, rw, no387)カー ネルの変数を変更し、あるものは(ether=, hd=, sound=)デバイスドライバに 渡され、またあるものは(single, auto)は /etc/init(あるいは/bin/init か /sbin/init のうち最初に見つかったもの)へ渡されます。

詳細は PARAMS.DOC を見てください。

"keyword=value" の形を取ったあらゆる未知のキーワードは "envp_init" に 置かれ /etc/init へ渡されます。この環境設定のための文字列は各種の rc ファイル /etc/rc* (/etc/rc.d/rc.*) でチェックされます。

例えば、rc.local に "set >/etc/boot_env_string" というコマンドを設定す ると、envp_init の中身がこのファイルに書きだされ、他のプロセスからも使 用可能になります。ただし、このコマンドはファイルシステムが読み書き可能 でマウントされる以前に実行される rc ファイルには記述しないこと!


2.5.1. コマンドラインの最大長

DOS のコマンドラインは(プログラム名も含めて) 127 バイトに限られていま す。パラメータファイル(@param, 3.2.2 参照)を使えば、カーネルへ渡せる文 字列の長さは理論的には 2047 バイトですが、init/main の静的バッファを節 約するために、文字列は一時的な保存場所に置かれ、カーネルによってコピー されます。このため文字列の最大長はコンパイル時に決められています。

1.0.5 以前のカーネルには、init/main.c に小さな問題がありました。main.c の静的なバッファが 80 バイトしか用意されてなかったのです。LOADLIN はパ ラメーターを圧縮しますが、その長さをチェックしていないため、パラメーター が多すぎると、起動時にカーネルをハングアップさせてしまいます。

Linux 1.0.5 から "command_line[]" は COMMAND_LINE_SIZE の大きさ、すな わち 256 バイトになりました。コマンドラインのサイズもチェックされてい ます。もっと大きなサイズが必要ならば、init/main.c の COMMAND_LINE_SIZE を変更するだけです。


2.6. 問題が起れば

私はいくつかのフィードバックを受けて 1.2 を 1.3 にバージョンアップし、 より徹底的なエラーチェック機能を付けました。いくつかのバグも見つかり、 修正しました。しかし、何千もの可能性がありうる PC のハードウェア/ソフ トウェアの組み合せの元では、完璧にバグを無くすことは不可能でしょう。で すから、あなたの直面した問題についてぜひとも私にフィードバックしてくだ さい。

もしバグに気づいたら、それに時間を費すことはせず、私あてに mail してく ださい!

しかし、問題をレポートしていただく際には詳しい情報が必要です。「私のス クリーンは真っ青になってしまいますが、何が悪いのでしょう?」だけでは十 分ではありません。

-d か -t オプションを使えば、LOADLIN は私(あなたにも)に有益な情報を示 してくれます。


2.6.1. 典型的なトラブルの例 その 1

   C:\LOADLIN>loadlin zimage /dev/sda1 ro
カーネルはロードされるが(LOADING......)、"unable to read superblock" というメッセージと共に"パニック"してしまい、ハードリセットするしかない。

何が問題なのかを確認するために -t オプションを付けてみてください:
    C:\LOADLIN>loadlin zimage -t /dev/sda1 ro

こうすれば、今までと全く同じ動作をしますが、Linux を実際にはスタートさ せません。そして、以下のような情報を表示します。
  Your current LINUX kernel boot configuration is:
   image file:       zimage
   kernel size:     0x4D010
   ram disk size:    0x0000
   root device:      0x0342  read only
   VGA mode:         0xFFFF
   command line size 0x001B
   command line:
     /dev/sda1 BOOT_IMAGE=zimage
   ..
   ..
   ..
"root device:" の欄を見てください。/dev/sda1 のデバイスのメジャー、マ イナー番号とは違っていることがわかります。でも、確かにルートディスクの パラメータとして "/dev/sda1" を使いました。間違いは明白です。 "/dev/sda1" の前に "root=" を付け忘れていました。(あるいは、rdev を使っ て zimage ファイルのルートデバイスフラグを変更することも可能です。)


2.6.2. 典型的なトラブルの例その 2

   C:\LOADLIN>loadlin zimage root=/dev/sda1 ro mem=0xFF0000
カーネルはロードする(LOADING....)が、Linux は "<2M RMA system halted" のメッセージとともに "パニック" して、ハードリセットするしかない。

間違いをチェックするために以下のように入力します。
  C:\LOADLIN>loadlin zimage -d report.dmp root=/dev/sda1 ro mem=0xFF0000

こうすれば、出力を画面(と report.dmp ファイル)に出せます。
     Your current LINUX kernel boot configuration is:
  ..
  ..
  command line:
    BOOT_IMAGE=zimage

     Your current DOS/CPU configuration is:
  ..
  ..
  total memory:     0x01E0000
  ..
  ..
これは LOADLIN のバグかも知れません。なぜなら、"mem=0xFF0000" は コマンドラインの "BOOT_IMAGE=zimage" 以前に現われないといけないからで す。

何が起ったかについて私にメールしてください。メールには "report.dmp" ファ イルと CONFIG.SYS を含めておいてください。そうしていただければ、どこが 間違っているかをチェックできます。

注意: ある種の条件下では(Javier 法を使わない場合) INT15 を使えばメモリサイズ を知ることができます。しかし、これはある種の TSR やドライバ(例えば HIMEM.SYS)が邪魔をすることもあります。しかし、"mem=0xFF0000" オプショ ンを使えば、この問題を解決することが可能です。Linux がロードされ、無事 展開されれば、それ以後は DOS (BIOS も)を使う必要は一切ありません。


2.6.3. デバイスファイルのマイナー番号についての混乱

以下に示すものはデバイスファイルのマイナー番号についての問題を示すもの です。

LOADLIN ver 1.2 のころ、こんなバグレポートを受けとりました。

"SHELL=c:\loadlin\loadlin.exe c:\loadlin\zimage root=/dev/hda10" としたところ、ロードはするが 'unable to read superblock' でパニックす る。

問題は:

Linus は "/dev/hda" の後に続く数字を16進数と解釈していますが、 Slackware 1.2.x の /dev に付けられたデバイス名は(Slackware 2.0.0 では 変更されています) dev/hda1 .. hda9 .. hda10 .. hda16 になっており、 Linus が考えていたような /dev/hda1 .. hda9 .. hdaa .. hdaf にはなって いませんでした。

ですから、LOADLIN のバージョン 1.3 以降では、ルートデバイスを LOADLIN 自身で解釈して、数字でブートセクターに渡すようにしています。私の命名法 は折衷的ですが、混乱を多少とも減らせれば、と思っています。

もし "/dev/hda, hdb, sda ..." の後に続く数字が 0, 0x あるいは a..f で 始まっていれば、それは 16 進数として解釈されます。(例: dev/hdaa /dev/sda0xE, /dev/hab0c)

もし、1..9 の数字で始まっていれば、10 進数と解釈されます。

もしそれ以外の文字列ならば、そのままコマンドラインに渡されます(より新 しいバージョンのカーネルはもっと違うデバイス名を持っているかも知れませ んから)

注意: -n オプションをつければこの変換は行なわれません。その場合、 root=/dev ... の部分はそのままコマンドラインへ渡されます。実際 には変換とコマンドラインへの展開の双方が行われますが、Linux が LOADLIN の変換を上書きし、LOADLIN は既知のデバイス番号をチェッ クする機会を得ます。 このオプションは将来の Linux の進化をにらんだものです。もし Linus がルートデバイスのリストを増しても、それらの新しいデバイ スを LOADLIN をアップデートすることなく使うことができます。


2.6.3.1. /dev/xd デバイスファイルのメジャー番号の変更

新しいカーネルでは /dev/xd のメジャー番号を 13 に変えています。ルート デバイスは LOADLIN の内部で変換されるので、古いカーネルをロードする際 にはトラブルが起きるはずです。このような場合には -oldxd オプションを付 けて、/dev/xd の古いデバイス番号(12)を使うようにします。setup.S へのパッ チをあてれば、この設定はLOADLIN が自動的にやってくれます。


2.6.4. ある種の DOS のメモリマネージャーやデバイスドライバに関する問題

LOADLIN がカーネルイメージをロードして、Linux へ制御を渡す前にどちらか 条件が必要です。

  1. Linux がプロテクトモードに切り替る寸前にセットアップコードに割りこ む(Javier 法を使って)機会があること

  2. あるいは割り込みベクター(といくつかの BIOS データ)を "起動時の" 状 態を模倣するために修正すること

a) のためには 0.99pl14 以上のカーネルが必要です。setup.dif パッチをあ てる方がいいでしょう(このパッチを Linus に送って公式のカーネルに採用し てもらうことを希望しています)。まず始めに Javier 法を試してみるべきで す。この方法はほとんど全てのマシンや設定で動くはずです。この方法を使え ば、DOS 用にどんな事前の設定も必要ありません。特にもう一度、以前から LOADLIN の古いバージョンを使っていた人に注意します。

Javier 法を使うためには、設定から BIOSINTV/REALBIOS を外すか LODLIN に -ja オプションを付ける必要があります!

Javier 法でうまく行かない場合、b) の方法を試してみてください。b) の方 法を試すには、CONFIG.SYS の最初に次の一行を加えてください。
  DEVICE=C:\LOADLIN\BIOSINTV.SYS
このドライバは、割り込みベクター用にデフォルトの BIOS 値を保存します。 約 700 バイトほどのプログラムなので、コンベンショナルメモリー(low memory)をほとんど消費しないでしょう。BIOSINTV.SYS はどんなメモリマネー ジャーを使う場合でも、DOS の上部メモリにロードしてはいけません。

もし、TSR やドライバが INT15 の割り込みを横取りしている場合、Linux に は誤った利用可能メモリ量が報告されるでしょう。(QEMMのような) DOS のメ モリマネージャーはいわゆる「ステルス法」を使ったときにこの問題を起しま す。

もし、このような事態が起れば、LOADLIN のコマンドラインに mem=xxxx と書 いてください。ここで xxxx はメモリの全バイト数です。(注意:マザーボー ドの BIOS がメモリのうち 128Kb を Shadow RAM に割りあてているかも知れ ません)

LOADLIN が示す "total memory" の欄が、 Linux から利用できるはずの全メ モリを示しています。

(BIOSINTV.SYS を使う)私の簡単な方法は、DOS によってほんのわずか変更さ れた割り込みテーブル(すなわち、本当に元のままのテーブルというわけでは ありません)を使いますが、ほとんど全ての設定の元で利用可能です。割り込 みベクターからはほぼ独立しているので、BIOS のデータ/スクラッチ・エリア に変更を加える必要はありません。REALBIOS 法の前に BIOSINTV 法を使って みるべきでしょう。

(例えば QEMM のような) DOS のメモリマネージャの元で使う場合の問題が報 告されています。そのようなメモリマネージャーは、いくかのベクターをフッ クするか LOADLIN がリアルモードに再入した時にはもはや使えないデータに アクセスしたりします。

BIOSINTV 法の選択肢として、バージョン 1.4 からは REALBIOS 法を取り入れ ました。この方法には次の 3 つが必要です。

  • REALBIOS.EXE

  • BOOTSECT.BIN

  • REALBIOS.INT

REALBIOS.EXE があなたのマシンに作るファイルが REALBION.INT です。

Alessandro Rubini(rubini@ipvvis.unipv.it)が BOOTSECT.BIN を書きました (このプログラムには Linus Torvalds の bootsect.S のコードが含まれてい ます)

彼の方法(linuxEXE パッケージで使われています)は、*本当の*オリジナルな BIOS の割り込みベクタを最も安全な方法で入手しています。彼の方法に比べ ると、他の全ての方法はトリッキーです。私は、彼の方法に加えて BIOS の data/scratch 領域、PIC-IMR とTOP-ROM を保存するようにしましたが、主要 な部分は Alessandroの方法のままです。

もし、本当にもし、Javier 法でも BIOSINTV 法でもうまく行かなかったとき の最後の方法として REALBIOS 法を使ってみてください。

しかし注意が必要です:

  • REALBIOS 法で作られる C:\REALBIOS.INT ファイルは、それが作られたマシン に固有のもので、C:\ になければいけません。

  • 友達に配布してはいけません("loadlin14.tgz" だけを配布してください)。

  • 友達のマシンからコピーしてもいけません。

  • (NFS などで)共有してはいけません。

  • もしハードウェアを変更したら(アダプタカードや RAM の着脱、IQR や I/O アドレスの変更など)があったらもう一度ファイルを作りなおしてください。

  • REALBIOS.INT を作ったマシンでのみ使ってください。

ところで:多分 PS2 では拡張 BIOS データで問題が起きるはずです。すみませ んが、この問題については、私にはテストするすべがありません。


2.6.4.1. REALBIOS.INT の作り方

  • - DOS のプロンプトから
        C:> CD \LOADLIN
        C:\LOADLIN> REALBIOS
    と入力。

  • - すると、こんな出力が出ます。
      Generation of the file C:\REALBIOS.INT (for the REALBIOS method)
      consists of TWO steps:
    
        1. Generating the special boot floppy and booting with it.
    
        2. Reading the saved interrupt table and BIOS data from the floppy
           and writing it to C:\REALBIOS.INT
    
      Type 1 or 2, (depending on which step you are in) or any other key
      to cancel:
    
        (訳注:画面に出るのはこのままでしょうが、あえて訳してみます)
         ----------------------------------------------------------------
       (REALBIOS 法のために) C:\REALBIOS.INT を作るためには 2 つのステップ
       が必要です:
    
         1. 特別なブートフロッピーを作り、それからブートします。
    
         2. セーブされた割り込みテーブルとフロッピーの BIOS データを読みこ
            み、C:\REALBIOS.INT に書き出します。
    
       1 か 2 (あなたがいるステップに応じて)を押してください。それ以外のキー
       を押すとキャンセルされます。

  • - まず最初のステップから実行しますので、"1" を押すと、こんな出力が示さ れます
      OK, we first generate the floppy !
      Insert an empty but DOS-formatted disk into drive A:
      (no matter what DOS format it is)
    
      Type C to continue or any other key to cancel
    
      -------------------------------------------------------------------
      OK, まずフロッピーを作ります。
      DOS でフォーマット済みの空のフロッピーを A ドライブに挿入してくだ
      さい(どんな DOS のフォーマットでも構いません)
    
      C を押すと続けます。その他のキーならキャンセルされます。

  • - フロッピーを入れて "C" を押すとこんな出力になります。
      OK, The special boot floppy has been generated.
      Leave it inserted in drive A: and reboot your machine
        But NOTE:
        If you have a disk cache program (like SMARTDRV)
        you may need to flush the write-behind cache first!
    
      ------------------------------------------------------------------
      OK, 特別のブートフロッピーができました。A ドライブに入れたまま、
      マシンをリブートしてください。
      でも注意して: もし(SMARTDRV のような)ディスクキャッシュプログラ
      ムを使っていれば、まず write-behind キャッシュをフラッシュしてく
      ださい。

  • - リセットボタンを押すか「三ッ指のあいさつ(CTRL-ALT-DEL)」をして、マシ ンをフロッピーからブートします。フロッピーのブートローダーが必要な BIOS の割り込みベクタとデータをフロッピーにセーブします。最後に、 マシンは次のような出力を示します。
      Interrupt table and BIOS-data saved on floppy.
      Open the floppy door and reboot from your hard drive,
      then run REALBIOS again (step 2).
    
      --------------------------------------------------------------------
      割り込みテーブルと BIOS データをフロッピーにセーブしました。A ドライ
      ブのドアを開けてフロッピーを取り出し、ハードディスクからリブートし
      ます。そして REALBIOS を再実行し、step 2 に進んでください。

  • - (フロッピーからブートしてしまうのを避けるために)フロッピードライブの ドアを開けて、リブートし、もう一度 LOADLIN のディレクトリに入り、
      C:\LOADLIN> REALBIOS
    と入力します。

  • - (ステップ 2 に入っているので)最初の質問には "2" と答えます。すると、 次のようなメッセージが出力されます。
      OK, we now read the saved interrupt vector from the floppy
      and save it to the file C:\REALBIOS.INT (no way to change the name!)
      Is the floppy (used in step 1) inserted in drive A: ?
    
      Type Y to continue or any other key to cancel
    
      --------------------------------------------------------------------
      OK, フロッピーにセーブされた割り込みベクタを読みこみ、
      C:\REALBIOS.INT(名前を変えることはできません)にセーブします。
      (step 1 で作成した)フロッピーを A ドライブに入れましたか?
     
      Y で継続、他のキーでキャンセルされます。

  • - 作成したフロッピーディスクを A ドライブに再挿入し、Y を押すと C:\REALBIOS.INT がフロッピーのデータから作成されます。もし何か変なこ とが起きれば、REALBIOS が教えてくれるはずです。


2.6.4.2. REALBIOS.INT の使い方

C:\REALBIOS.INT は他のマシンに移動させられないように"不可視+システム" ファイルになっています(DIR コマンドでは見えません)。

LOADLIN は最初に BIOSINTV.SYS を探し、次に REALBIOS.INT を探します。こ の順は "-rb" オプションで逆にできます。

LOADLIN は REALBIOS.INT に保存された ROM-BIOS-DATE をチェックして、も し合っていなければ "-t" の冗長(verbose)モードに替ります。ある種の DOS のメモリマネージャーは、ROM-BIOS のトップページをリマップして warm-boot に割りこむため、正しい ROM-BIOS-DATE を返さないことがあります。 LOADLIN はリアル・モードへ移行する前にこの日付をチェックするので、起動 に失敗してしまいます。

このような場合、"-rx" オプションを使って日付のチェックをスキップしてく ださい。

注意:

  • - C:\REALBIOS.INT は配布されないように HIDDEN+SYSTEM 属性になっていま す。もし C: ドライブが圧縮されていても C:\ にないといけません。

  • - 上で使ったフロッピーは DOS では利用できなくなります。再利用するため には、再度フル・フォーマット("クイック"フォーマットではなく)する必要 があります(ローレベルフォーマットとも言いますね)。

  • - あらゆる種類のハードウェアを追加したり、外したり、再設定した場合、も う一度 REALBIOS を実行する必要があります!(私が Javier 法を好む理由は ここにあります)


2.6.4.3. 上位メモリにロードされるドライバやデータ

バージョン 1.5 になってからは、上位メモリにロードされる DOS ドライバの 問題は最小限になりました(多分、問題は起らないと思います)。でも、 BIOSINTV/REALBIOS 法を使う場合、LOADLIN はバージョン 1.4 と同じ動作を することに注意してください。そのため、問題が生じることがあるかも知れま せん。

リアルモードに戻った時には、0A0000h 以上にマッピングされたメモリは見え なくなります。そのため、BIOSINTV/REALBIOS はどんなデバイスドライバを使っ ても、決して上位メモリにはロードしないで下さい(DEVICEHIGH=..., LOADHI..., LH... などを使って)

注意: 多くの DOS ドライバ用のインストールプログラム(例えば Ontrack 製 の Drive Rocket Data Accelerator)はドライバを上位メモリにロードするの がデフォルトになっています。

また、090000h から 09BFFFFh の領域はセットアッププログラムと LOADLIN が配置される場所なので、必要なデータを置いてはいけません。これはバー ジョン 1.5 でも同じですが、もしそのような状況が生じれば警告が発っせら れます。通常では 640K のベースメモリに残っている上位 20K バイトにBIOS の残存が 1 K バイトほど残る程度のはずです。


2.6.4.4. V86 モードの検出に関する問題

(Jacek Zapala zapala@if.pw.edu.pl によると) ある種の 486 CPU のクロー ンでは、CR0 を使って V86 モードを検出する際に問題が起きることがあるそ うです。これは CPU がリアルモードにありながら、ページングが可能になっ ている時に起ります。確かにこのような設定も可能ですが、ドキュメントにも なっていないし、INTEL もサポートしていません。多分、この手法でマザーボー ドのBIOS をshadow ram にマッピングしているか、何か古くて奇妙な EMM マ ネージャーを使っているのだと思いますが、その CPU が正確に 486 のクロー ンではないことを示しているとも言えます。-clone オプションを付ければ、 CR0 チェックをパスして、EMM マネージャーがあれば V86 モードにあると見 なします。もちろん、この種の EMM マネージャーが実際のページングをして はいけません!


2.6.5. デバッグ情報(-v,-t,-d)に関する説明

-v,-t,-d オプションの情報は、ブートセクターとセットアッププログラムが ロードされて LODADLIN によって更新された時点で出力されます。出力される 情報は Linux から見えるものですが、-t と -d オプションの場合、zimage ファイルはロードされず、linux は起動しません。

説明:

  • LINUX カーネルのブート時の設定は以下の通りです:
      image file:    d:\tmp\1-1-47.0  <- カーネルイメージのファイル名
      kernel size:   0x5BFF0          setup size:   0x0A00
                     ^                ^- セットアッププログラムのサイズ(バイト)
                     |------------------ カーネルサイズ(バイト)
      
      kernel version:   1.1.47 (root@el15) #4 Mon Aug 00:57:07 MET DST 1994
                   ^---- これは setup.S にLOADLIN 用パッチを当てた時の
                         み表示されます
      ram disk size:    0x0000             <- 0 = none, それ以外は Kbytes での大
                                              きさ
      root device:      0x0342  read/write  <- ルートデバイスの MAJOR+MINOR 番号
      VGA mode:         0xFFFF              <- startup 時のビデオモード
      command line size 0x0011              <- 圧縮されたコマンドラインの大
                                               きさ
      command line:                         <- Linux から見えるコマンドライ
        BOOT_IMAGE=zimage                      ンの状態

  • 現在の DOS/CPU の設定は以下の通りです:
      load buffer size:   0x775F0   setup buffer size:   0x1000
                  ^                   ^-  セットアッププログラムのコードを格
                  |                       納するバッファの大きさ(バイト)。
                  |                       "setup size" よりも大きくないといけ
                  |                       ません。
                  ----------------- 展開されたカーネルを格納するバッファ
                                    の大きさ(バイト)。"kernel size" よ
                                    りも大きくないといけません。
      
      total memory:     0x0FE0000           <- INT15 から計算した Linux から
                                               見える RAM の上限。
    
      CPU is in V86 mode                    <- 仮想 86 モードにいる場合
        or
      CPU is in REAL mode                   <- リアルモードにいる場合
        or
      CPU is in undocumented REAL PAGING mode, trying any way
      (「CPU はドキュメントにない REAL PAGING モードにあります。とにかくやっ
      てみます」)
    
      BIOSINTV.SYS:  YES                 <- $BIOSINT を正しく読みこめた場合
        or
      REALBIOS:      YES
        or
      REALBIOS:      YES, but ROM-BIOS-DATE differs, must rerun REALBIOS.EXE
       (BIOSINTV.SYS はあるが ROM-BIOS の日付けと異なる。REALBIOS.EXE を再実
        行してください。)
    
      SetupIntercept: NO                        <- LOADLIN-1.4 mode を使う
        or
      SetupIntercept: YES, patching setup code  <- Javier 法を使う
        or
      SetupIntercept: YES, legal intercept      <- 同上だが、カーネルにパッ
                                                   チ済み

  • ここには、以下の 4 つ可能な状態のうちの 1 つが示される:
       stat1: cpu in real 386 mode(cpu は リアル 386 モードにある)
     
       stat2: cpu_V86, but no VCPI available (check aborted) 
    
             (cpu は 仮想 86 モードにあるが VCPI が見つからない(チェック中止))
    
       stat3: VCPI_present, but physmap != logmap (check aborted)
    
             (VCPI は見つかったが、仮想マッピングと論理マッピングが一致しな
              い(チェック中止))
    
       stat4: VCPI_present, physmap=logmap, all OK for switch to realmode
    
             (VCPI はあり、仮想マッピングと論理マッピングも一致する。リアル
              モードにスィッチするのに問題なし。)

  • 以下に示すものは、DOS のコマンドラインかパラメータファイルについて:
      input params size 0x000D              <- DOS のコマンドラインの大きさ
                                             (あるいは圧縮されたパラメータ
                                              ファイルの大きさ)
      input params:                         <- DOS コマンドラインの内容
       ..\zimage -t

  • 以下、追加的な情報か警告が続く:
      LOADLIN started from DOS-prompt       <- この 2 つのうちどちらか
         "       "     "   CONFIG.SYS       <- (LOADLIN は DOS の環境変数に 
                                               COMSPEC= の行があると仮定)
    
      You are running under MS-WINDOWS      <- もし WINDOWS から動かしていれ
                                               ば、この警告が出力されます。
                                               (LOADLIN は WINDIR= という環
                                               境変数があると仮定します)


2.7. UMSDOS システムをブートするためのプリプロセッサ LOADLINX

このプログラムは LOADLIN ユーティリティの「プリプロセッサ」として使 われ、DOS 風のドライブ名(C:, D:, など)を Linux のデバイス名(/dev/....) に変換します。

"root=X:" に加えて、LOADLINX は LOADLIN と同じパラメータを受け付け、 LOADLIN に渡します。(LOADLIN とは異なり) LOADLINX ではパラメータファイ ル (@param-file) のパラメータをコマンドラインに書くことも可能で、そ のパラメータは上書きされます。 (例えば "loadlinX zImage @default vga=3" という書き方は loadlinX では 可能ですが loadlin では使えません)

LOADLINX は CONFIG.SYS ファイルの shell= に指定することも可能です。し かし、LOADLINX は LOADLIN と同じディレクトリにないといけなせん。

Jacques Gelinas(jacques@solucorp.qc.ca)が変換アルゴリズムの発案者です (私はそれを強化して LOADLIN にインプリメントし、DOS の正確な振舞いにあ わせただけです)。

普通のユーザーは DOS パーティションをルートデバイスにはしないでしょう から UMSDOS ユーザーのみに価値があるものでしょう。

LOADLINX は AT タイプのドライバ(IDE)か、DOS の元で使える BIOS を持った SCSI アダプタカードに接続された最大 2 台までの SCSI ディスクの環境での み利用できます(すなわち INT13 システムコールで使えねばなりません)。IDE と SCSI を混在した環境は(まだ)サポートしていません。しかし、そのような 環境では root=/dev/xxxx として LOADLINX のドライブ名の変換をバイパスす ることができます。


2.7.1. LOADLINX のコマンドライン

使い方:
  LOADLINX [--dv]  LOADLIN_command_line

    --dv          デバッグ情報の出力;LOADLIN は実行しない。

    --version     zimage からバージョン番号を出力(setup.S に対するパッチが必要)

    --version=-1.0.9   カーネルバージョンが 1.0.9 以下かのチェック

    --version=1.1.47   カーネルバージョンが 1.1.47 以上かのチェック

    --version=1.1.47#2 カーネルバージョンが 1.1.47 () #2 かどうかのチェック
[訳注:よく分りませんが、1.1.47 でパッチが当っているかのチェックだと思います]

例:
  LOADLINX zimage.ums root=D: vga=ask

  (注意:UMSDOS はブート時にルートファイルシステムを r/w でマウントする
         必要があるので "ro" オプションを使ってはいけません。)

  LOADLINX zimage_1.147 @test.par root=/dev/hdb2 --version=1.1.47#2

  (注意:全てのパラメーターを test.par ファイルから読みこみ、カーネルイ
        メージファイル名とルートデバイス名を書きかえ、バージョンチェッ
        クを行います)

こんなバッチファイルを使うのがよりスマートな方法でしょう。
  +-------------------- start of LINUX.BAT
  |
  |  SMARTDRV /C
  |  C:\LOADLIN\LOADLINX C:\LOADLIN\ZIMAGE root=C: vga=3
  |
  +-------------------- end of LINUX.BAT

こうしておけば、
  C> linux
とするだけで済みます。


2.8. コメントやバグレポートの送り先

コメントやバグレポートは以下に送ってください。
  E-Mail:    lermen@elserv.ffm.fgan.de

  SnailMail: Hans Lermen
             Am Muehlenweg 38
             D53424 REMAGEN-Unkelbach
             GERMANY

念のため、繰り返して注意しますが、どうぞあなたの E-Mail の "Reply to" パスが正しいか確認してください。宛先不明で帰ってきたメールが多数ありま す。ゴミ箱送りにするためにメールに返事をするのは楽しいことではありません。

[訳注:このマニュアルの日本語訳に関しては、kojima@komae.denken.or.jp まで連絡してください。]


2.9. 協力者と謝辞

このプログラムは F.Coutant 作の BOOTLIN 無しには、こんなに速く書きあげ ることはできなかったでしょう。

このプログラムは Linus Torvalds なしには全く意味のないものです。

Jacques Gelinas が VCPI のサポートを実現するように勇気づけてくれました。 LOADLINX プリプロセッサも彼のアイデアをインプリメントしたものです。

Alessandro Rubini は、自作の linuxEXE パッケージから BOOTSECT.BIN 関係 のコードを利用させてくれ、いくつか重要なヒントをくれました。

Chuck Munro は QEMM とバージョン 1.4αの問題についてのヒントをくれまし た。彼はまた、ドキュメント化について手伝ってくれました。

Javier Achirica がセットアップからスイッチアウトする方法を考案しました (LOADLIN-1.5)。この結果、ほとんど全てのマシンで BIOSINTV や REALBIOS 法は不要になりました。この方法は:セットアッププログラムを V86 モード で実行し、プロテクトモードに移行する直前に割込むことです。

重要な問題やバグレポートが:
  Mitchum Dsouza, UK
  Claus Tondering, Denmark
  Johann Friedrich Heinrichmeyer, Germany
  Jacek Zapala, Poland
  Jon Peatfield, UK
から届きました。

全ての ALPHA テスターに感謝します。彼らは "テスター募集"の呼びかけに応 じてくれました。参加者全てのリストを掲げることは不可能ですが、彼らは特 に徹底的にテストしてくれました:
  Michael Goddard, US
  Shih-Hua Chao, US
  Rene Baart, Netherlands
  Asad Khan,
  Jan Lien, Sweden

また、LOADLIN で問題は起らなかったけど、私のもとに "動いたよ" とメール してくれた全ての人に感謝します(肯定的なフィードバックは最善のものです)


Chapter 3. PARAMS.DOC

LOADLIN 1.5 ((C) 1994 lermen@elserv.ffm.fgan.de)
 and
Linux version: 0.99.14, 0.99.15, 1.0, 1.1.47
(翻訳:こじまみつひろ kojima@komae.denken.or.jp)


3.1. loadlin のコマンドパラメタ

以下に示すものは認識されるコマンドラインパラメータです。

  1. LOADLIN が解釈するもの
      ramdisk=size        (ramdisk のサイズ(KBytes))
      or
      ramdisk=size,no     (上と同じですが、ディスクを変えるように、
                                とのプロンプトは出ません)
      例:  ramdisk=1440,no
    
            vga=mode

  2. Linux のカーネルが解釈するもの
      mem=number       (0.99pl15 以上では物理的なメモリの終り)
      root=device
      ro
      rw
      no387
      debug            コンソールに出力されるログレベルを 10 にセット
      no-hlt           起動時の HLT チェックを中止

  3. init が解釈するもの
      single
      auto
      ro,rw,no387   (カーネルから渡される)

  4. 各種のドライバが解釈するもの
      reserve=port1,num1,...,port5,num5 # 80x86 の io ポート予約用
      ether=irq,base_addr,mem_start,mem_end,dev_name # イーサネット用
      hd=cyl,head,sect         # HDD 用。2 ドライブあればこれを 2 度繰りかえす
                               # 1 つめがドライブ 0 に対応
      bmouse=irq               # バスマウスの IRQ の指定
      max_scsi_luns=n          # (n は 1 から 8 の間)
      st0x=base_address,irq    # SEAGATE controller ST01/ST02
      tmc8xx=base_address,irq  # Future Domain TMC-885,TMC-950
      t128=address,irq         # Trantor T128/T128F/T228
      ncr5380=port,irq,dma     # Generic NCR5380 driver
      aha152x=portbase,irq,scsiid,reconnect    # Adaptec AHA-152x driver
      xd=type,irq,iobase,dma   # xd ハードディスク用
      mcd=port,irq             # Mitsumi CD 用
      sound=0x0TTPPPID, ..
      sbpcd=sbport,SoundBlaster
      sbpcd=LMport,LaserMate
      sbpcd=SpeaFXport,SPEA

  5. 環境変数になるもの

    name=xxxx の形式になっているパラメータで、カーネルにもドライバにも認識 されないものは環境変数に登録されます。

    LOADLIN 自身は BOOT_IMAGE=imagefile を環境変数に登録します。ユーザー自 身でその他の環境変数を利用して /etc/rc などで条件に合せた動作をさせる ことが可能です。


3.2. コマンドパラメタの詳細

以下に示すものはより詳細な説明です:

  • LOADLIN で認識されるパラメータ:
    
  root=device
      -----------
           device      "/dev/hda2" のようなシンボリックなデバイス名か 16 
                       進で示されるデバイスナンバー(上位バイトがメジャーナ
                       ンバーで、下位バイトがマイナーナンバー)
                       認識されるシンボリックデバイス名(とそのパーティション)
                       は以下の通り:
                       "hda", "hdb", "sda", "sdb", "sdc", "sdd", "sde",
                       "fd", "xda", "xdb"
                       
            ここには問題もあります:
    
            Linus は /dev/hda の後に続く数字を 16 進と解釈しています。とこ
            ろが、Slackware では Linus がしたであろう
            /dev/hda1 .. hda9 .. hdaa .. hdaf  ではなく、
            /dev/hda1 .. hda9 .. hda10 .. hda16 という番号付けになっていま
            す。
    
            このため、LOADLIN のバージョン 1.3 以降では、ルートデバイスを
            自ら解釈して数字でブートセクターに渡すようにしています。私の妥
            協的な命名法が、多少なりとも役にたてば、と願っています。
    
            私の命名法は:
            もし "/dev/hda, hdb, sda .." に続く数字が 0, 0x あるいは a..f 
            ならば 16 進数と考え、1..9 で始まっていれば 10 進数とみなしま
            す。もし、どちらにもあてはまらなければ、その文字列はそのままコ
            マンドラインへと渡されます(より新しいバージョンのカーネルではま
            た違うデバイス名を用意しているかも知れません)
    
            例:
            root=302
            root=0x201
            root=/dev/hda2
            root=/dev/sdaa   は root=/dev/sda10 、 /dev/sda0xa と同じ。
    
      ramdisk=size
      ------------
    
              size     Kbytes 単位で表した RAMDISK の容量です。ラムディスクの
                       イメージは root=/dev/fdx が指定された場合、カーネルの
                       起動時にフロッピードライブから読みこまれます。イメージ
                       を読みこんだ後、 カーネルはラムディスク(フロッピーでは
                       ありません)をルートデバイスにします。(カーネルがロード
                       された後など)起動用のフロッピーディスクが不要になれば、
                       LOADLIN 自身がラムディスクにコピーすべきディスクを入れる
                       ようにプロンプトを出します。
    
      vga=mode
      --------
    
          mode     -3   VGA モードをユーザーに問いあわせる。 ask でも同じ
                   -2   80x50 拡張 VGA モード extended でも同じ
                   -1   80x25 標準モード normal でも同じ
                    0   ブートプロンプトが出ている時に 0 を入れたと同じ
                    .
                    .
                    n   ブートプロンプトが出ている時に n を入れたと同じ
    
                    ro  "ro" を指定するとルートデバイスはリードオンリーモードで
                        マウントされます(UMSDOS 用ではありません!)
    
                    rw  "rw" を指定するとルートデバイスをリード/ライト可能で
                        マウントします

  • カーネルにのみ理解されるパラメータ
      mem=number
      ----------
    
          number  物理的な RAM の終りを示します。0.99.15 以上のカーネルで利用で
                  き、インストールされている RAM のサイズを自動的に認識できない
                  ときに使うと便利です。
    
      root=device
      -----------
           device  "/dev/hda2" といったシンボリックデバイスかデバイス番号を示す数
                  字(上位バイトがメジャー番号、下位バイトがマイナー番号)。認識可
                  能なシンボリックデバイス名(パーティションも含めて)は:
                  "hda","hdb","sda","sdb","sdc","sdd","sde","fd","xda","xdb"
    
           注意:1.1.47 以前のカーネルでは xda=0xC00, xdb=0xC40 だったが
                 それ以降のカーネルでは    xda=0xD00, xdb=0xD40 に変更
           例:
                  root=302
                  root=/dev/hda2
    
           !!注意:古いカーネル(1.0.5 以前)には init/main.c に小さなバグが
           !!      あります。もっとも、ほとんど問題になることはありませんが:
           !!      シンボッリックデバイス名の最後("hda2")が init にオプション
           !!      パラメータとして渡されてしまい、init が "illegal option" と
           !!      文句を言います。しかし、エラーにはならずにそのまま実行されます。
           !!
           !!      もっと注意すべきことは、コマンドラインの静的バッファが小さすぎる
           !!      ことです(init/main.c では 80 バイトに設定されています)。このバッ
           !!      ファのサイズを 512 にしてカーネルを再構築するのがいいでしょう。
           !!
           !!      このバグは Linux 1.0.5 以降では修正されており、"command_line" も
           !!      最近のカーネルで 256 バイトがデフォルトになり、必要ならば 
           !!      init/main.c の #define COMMAND_LINE_SIZE xxxx を変更することで簡
           !!      単に変更することができます(上限は 2047 です)
    
      no387
      -----
      "no387" を指定するとハードウェア浮動小数点コ・プロセッサを使用しません。    
    
      1.1.47(より以前かも)以降では、ro,rw,no387 のオプションは init へは渡さ
      れなくなりました。
    
      次のオプションは新しく設定されたものです。
    
      debug  コンソールに出力されるログレベルを 10 に設定します。
      -----
    
      no-hlt  起動時に HLT コマンドのチェックをしません。もし 486 
      ------  クローンチップを使っていれば、このオプションは*きわめて*
              有益でしょう。

  • "init" に認識されるパラメータ:
      single   起動時に "シングルユーザー・モード" になります。
      ------
    
      auto
      ----
    
      ro,rw,no387   (1.1.47 以前のカーネル用。上記のコメントを見てください)
      -----------

  • イーサネットの設定
      ether=irq,base_addr,mem_start,mem_end,dev_name
      ---------------------------------------------
    
            irq        数字、IRQ 番号(3..15)
            base_addr  数字、IO ベースアドレス(0x280,...)
            mem_start  数字、シェアードメモリーの開始
            mem_end    数字、シェアードメモリーの終り
            dev_name   文字列
                       eth0..3     all configured ethernetcards
                       dl0         D-Link DE600 ポケットアダプタ
                       atp0        AT-LAN-TEC (RealTek) ポケットアダプタ
                       plip0..2    パラレルIP (PLIP)
                       sl0..3      シリアルIP (SLIP)
    
            例:  ether=10,0x280,0xc8000,0xcbfff,eth0
    
            関係するファイル: net/inet/eth.c, drivers/net/Space.c

  • I/O ポートの予約
      reserve=port1,num1,...,port5,num5
      ---------------------------------
    
              portn     対象となる IO ポートの範囲番号
              numn      その番号で予約するアドレス(これらのアドレスは 
                        "ioport_register" で "1" にセットされる)
    
              関連するファイル:  kernel/ioport.c
                                 (v1.2 以降では arch/i386/kernel/ioport.c)

  • ルートデバイスのハードディスクパラメーターの設定
      hd=cyl,head,sect
      ---------------
      # 注意:もし 2 つのドライバを持っていれば、hd= パラメータを 2つ 書くこ
      # と。1 つめがドライブ 1 に、2 つめがドライブ 2 に対応する。
      # 例:loadlin zimage hd=1001,15,17 hd=989,15,56 root=/dev/hdb2 ro
      # これは私のマシンの例ですが、実際には不要です。もし Linux が BIOS か
      # ら正しくドライブのパラメータを取得できないときにのみ必要です。
    
      関係するファイル: drivers/block/hd.c
      設定:        CONFIG_BLK_DEV_HD

  • バスマウス用の IRQ の設定:
      bmouse=irq
      ----------
    
      関係するファイル:drivers/char/busmouse.c
      設定:             CONFIG_BUSMOUSE

  • SCSI コントローラー用のパラメーター:
      max_scsi_luns=n                 lun の最大値(1 から 8 までの間)
    
      st0x=base_address,irq           SEAGATE ST01/ST02 用の設定
    
      tmc8xx=base_address,irq         Future Domain TMC-885, TMC-950 用
    
      t128=address,irq                Trantor T128/T128F/T228 用
    
      ncr5380=port,irq,dma            NCR5380 用
    
      aha152x=portbase,irq,scsiid,reconnect     Adaptec AHA-152x 用
    
      関連ファイル: drivers/scsi/seagate.c, t128.c, g_NCR5380.c, aha152x.c
    
      設定:         CONFIG_SCSI_SEAGATE, CONFIG_SCSI_T128,
                     CONFIG_SCSI_GENERIC_NCR5380, CONFIG_SCSI_AHA152X

  • SCSI テープ用のパラメータ:
      st=buffer_size,write_threshould,max_buffers
    
         buffer_size        Kbyte 単位で示したテープバッファのサイズ(ST_BLOCK_SIZE)
         write_threshould   バッファを書きだすまでの大きさ(buffer_size より小
                            さくすること)
         max_buffers        予約しておくバッファの数
    
         関連ファイル: drivers/scsi/st.c
         設定:         CONFIG_CHR_DEV_ST

  • XT ハードディスコントローラ(DTC 5150X)用のパラメータ:
      xd=type,irq,iobase,dma
      ----------------------
    
      関連ファイル: drivers/block/xd.c
      設定:         CONFIG_BLK_DEV_XD

  • Mitsumi 製の CDROM ドライバ用のパラメータ:
      mcd=port,irq
      ------------
    
      関連ファイル:drivers/block/mcd.c
      設定:        CONFIG_MCD

  • サウンドカード用の設定:
      sound=0x0TTPPPID, ..
      ----------------
    
      全ての値は 1 つの longint 値に埋めこまれる。上の例では、16 進のフォー
      マットになっており、それぞれ 16 進数で記述される。
    
            TT  サポートしているカードのタイプ
                設定されているカードへのインデックス。もし全てのカードが設定され
                ていれば(普通あり得ない設定だが)、以下の順番になっている。
                            Roland MPU-401
                            Gravis Ultrasound
                            ProAudio Spectrum
                            SoundBlaster
                            SoundBlaster 16
                            SB16 MPU-401 (SB16-MIDI port)
                            AdLib
    
            PPP        使用するポートのアドレス
    
            I          IRQ
    
            D          DMA Channel
    
      関連ファイル: drivers/sound/dev_table.h,dev_table.c
      設定:         CONFIG_SOUND

  • IDEタイプ の CD-ROM(Kotobuki/Matsushita/Panasonic)用のパラメータ
      sbpcd=sbport,SoundBlaster
      ------------------------
      sbpcd=LMport,LaserMate
      ----------------------
      sbpcd=SpeaFXport,SPEA
      ----------------------
    
            sbport       サウンドブラスタ用のドライバが使うベースアドレス + 0x10
                         (0x230 なら 0x220+0x10 を意味している)
            LMport       MPU タイプのポートで、0x300 か同等のアドレス
            SpeaFXport   SpeaFX カードのベースアドレス
    
      関係ファイル: drivers/block/sbpcd.c
      設定:         CONFIG_SBPCD


Chapter 4. QUICKSTA.RT

Quickstart for LOADLIN-1.5

LOADLIN のバージョン 1.5 は(それ以前のバージョンとは異なり)、たいてい 特別の設定は不要で、ALPHA テスターからは十分安定している、と報告されて います。だから、必要なものは、

これらのファイルを DOS のパーティション(例えば C:\LOADLIN)にコピーしま す。2 つのファイルは同じディレクトリに置いてください。さもないと LOADLINX が LOADLIN を見つけられません。

Linux を起動するためには"/vmlinuz" や "/usr/src/zImage" などの圧縮され たカーネルイメージが必要です。Slackware では、あなたが手に入れた ftp サイトの ..../slackware/kernels のディレクトリに(bare, scsi, modern 等 の)多くのカーネルが用意されています。

カーネルイメージも DOS パーティション(例えば C:\)にコピーします。

dos プロンプトから起動するには:

  1. Linux のパーティション(ext2, minix, ...)をルートディレクトリとし てマウントするには、
      loadlin c:\vmlinuz root=/dev/hdb2 ro
                                        ==

  2. UMSDOS ファイルシステムをルートディレクトリにするには、
      loadlin c:\vmlinuz root=/dev/hda1 rw
                                        ==
         or
    
      loadlinX c:\vmlinuz root=c: rw
    とします。

  3. SlackWare がインストールされた A ドライブ にあるルートフロッピー からブートしてカーネルイメージはハードディスク上にある場合、
       
      loadlinX c:bare root=a: rw ramdisk=1440,no
    SlackWare がインストールされたルートフロッピーが B ドライブにあり、 カーネルイメージの入った DOS フロッピーが A ドライブにある場合、
      loadlinX a:scsi root=b: rw ramdisk=1440,no
    SlackWare がインストールされたルートフロッピーが A ドライブ、カー ネルイメージの入った DOS フロッピー*も* A ドライブにある場合、
      loadlinX a:modern root=a: rw ramdisk=1440
    (LOADLIN はカーネルをロード後、フロッピーを交換するように示します)

注記: どのルートパーティションを使うかは知っておく必要があります。上の /dev/xxx とか C: は、あくまで例に過ぎません。

もしうまく行かなかった場合、MANUAL.TXT を読んでください。

この文書は、特に Slackware のユーザーのために、SlackWare 2.0.0 に附属 のPatrick Volkerding が書いた LODLIN14.TXT を修正して添付したものです。 多分、Pat 自身も文書を LOADLIN-1.5 用にバージョンアップするでしょうか ら、新しいLODLIN15.TXT は "-----" 以下に付けておきます。

注意してほしいことは、公式の LOADLIN は *.TGZ 形式になっていますが、 Pat's のものは*.ZIP になっていることです。ですから、すでに Slackware 2.0.0 をインストールしている場合、手順のうち "unzip ... pkunzip loadlin15.zip" の部分は飛ばし、(Linux のもとで) tar を使って LOADLIN-1.5 をインストールできます。

  mount -t msdos /dev/hda1 /mnt
  cd /mnt
  mkdir loadlin
  cd loadlin
  tar -xzvf lodlin15.tgz

Hans Lermen(訳注:loadin の作者)
elserv.ffm.fgan.de

============================================================================
----------------------------------------------------------------------------

これは Linux を MS-DOS から起動するためのユーティリティです。LILO を使っ て起動するのに取って替り得るもので、初心者には LILO よりもずっと安全で しょう。LILO では不可能な UMSDOS からの起動も難なくこなします。

Loadlin を使うためにはまず Linux をインストールする必要があります。 「LILO のインストール」はスキップしますが、「システム設定」の最初にた ずねられる bootdisk は作成しておきましょう。システムを起動し、 kernel(/vmlinuz)を DOSのパーティションにコピーします。Linux をインストー ルすればどこかにDOS のパーティションがマウントされていることでしょう。 もしマウントされていなれば、以下のようにして手動でマウントします。
  mount /dev/hda1 /mnt -t msdos
どのパーティションが DOS のパーティションかは 'fdisk -l' で確認できま す。

次に、カーネルを DOS のパーティション上にコピーします。
  cp /vmlinuz /mnt/vmlinuz
DOS を起動して、lodlin15.zip を unzip します。
  unzip -d lodlin15.zip

  or:  

  pkunzip -d lodlin15.zip
そして、C:\LOADLIN(あるいはあなたの決めた場所) にあるドキュメントを読 みます。それらは loadlin の作者自身が書いているので、私がどうこう言う よりも有益でしょう :^)

ここまで来れば loadlin.exe を使って Linux パーティションを起動するのは、
  loadlin c:\vmlinuz root=/dev/hdb3 ro
とするだけです。

もし UMSDOS を使っていれば、このようにします:
  loadlinx c:\vmlinuz root=c: rw
繰りかえしますが、全てのオプションに対する詳細については LOADLIN 附属 のドキュメントを見てください。それらには、私が見たなかでは最も完璧な起 動時にカーネルに渡されるオプションのリストも入っています :^)

それでは、Good luck

Patrick Volkerding (訳注:Slackware の作者です)
volkerdi@mhd1.moorhead.msus.edu

日本語訳:小島 三弘
kojima@komae.denken.or.jp


Chapter 5. 日本語訳について

配布形態に関するお問い合わせなどは JF@linux.or.jp までお願いします。

日本語訳:小島三弘 <kojima@komae.denken.or.jp>(1995/02/13)
SGML 変換:森本淳 <morimoto@xantia.citroen.org>(2000/05/12)
千旦裕司 <ysenda@pop01.odn.ne.jp>(2001/09/14)

Notes

[1]

この LOADLIN のドキュメントも長すぎますよね!